Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Planificador de consultas
El nuevo planificador de consultas para Amazon DocumentDB (planificador versión 2.0) incluye funciones avanzadas de optimización de consultas y un rendimiento mejorado. La versión 2.0 de Planner para Amazon DocumentDB 5.0 mejora el rendimiento hasta 10 veces con respecto a la versión anterior cuando se utilizan update operadores con find índices. Las mejoras en el rendimiento se deben principalmente al uso de planes de indexación más óptimos y al permitir el escaneo de índices para operadores como los operadores de negación ($neq,$nin) y anidados. $elementMatch Las consultas de la versión 2.0 de Planner se ejecutan más rápido gracias a mejores técnicas de estimación de costes, algoritmos optimizados y una estabilidad mejorada. La versión 2.0 de Planner también es compatible con el filtro APIs de caché del plan, lo que mejora la estabilidad del planificador. Con esta función, Amazon DocumentDB 5.0 ahora ofrece la posibilidad de seleccionar entre las distintas versiones del planificador de consultas.
Requisitos previos
Los siguientes requisitos previos se aplican a la versión 2.0 del planificador:
La versión 2.0 de Planner está disponible en todas las regiones donde está disponible la versión 5.0 del motor.
Para optar por utilizar la versión 2.0 como planificador de consultas predeterminado, el clúster debe tener el parche del motor 3.0.15902 o posterior de la versión 5.0 de Amazon DocumentDB. Para obtener información sobre los pasos para actualizar el parche a la última versión del motor, consulte. Actualización de un parche a la versión del motor de un clúster
Para configurar la versión 2.0 del planificador de consultas como planificador de consultas predeterminado, necesita permisos de IAM para actualizar los grupos de parámetros del clúster.
Seleccionar la versión 2.0 del planificador como planificador de consultas predeterminado
Siga los siguientes pasos para seleccionar 2.0 como planificador de consultas predeterminado desde la consola o la CLI:
Siga los pasos Modificación de parámetros de clúster de Amazon DocumentDB que se indican para modificar el grupo de parámetros del clúster.
Para el parámetro denominado «PlannerVersion», cambie el valor a 2.0 para indicar la versión 2.0 del planificador.
Seleccione Aplicar inmediatamente (si selecciona Aplicar al reiniciar, la selección no será válida hasta el siguiente reinicio del clúster).
Prácticas recomendadas
Para obtener los resultados esperados, utilice las siguientes prácticas recomendadas al aplicar la versión 2.0 del planificador:
En un clúster global, seleccione el mismo plannerVersion valor (1.0 o 2.0) en los grupos de parámetros del clúster para ambas regiones. Tenga en cuenta que seleccionar diferentes versiones del planificador en las regiones principales y secundarias puede provocar un comportamiento y un rendimiento de las consultas incoherentes.
La actualización a la versión 2.0 del planificador durante un período de mantenimiento programado o durante períodos de tráfico reducido será lo menos molesto, ya que puede haber un aumento en las tasas de error si se cambia la versión del planificador cuando las cargas de trabajo se están ejecutando activamente.
La versión 2.0 de Planner funciona de manera óptima con la versión 5.0 de MongoDB shell.
Limitaciones
Las siguientes limitaciones se aplican a la versión 2.0 del planificador:
La versión 2.0 de Planner no es compatible con los clústeres elásticos, que recurrirán a la versión 1.0 de Planner.
La versión 2.0 de Planner no es compatible con la agregación ni con comandos distintos, por lo que se recurrirá a la versión 1.0 del planificador.
El filtro de caché del plan de la versión 2.0 de Planner no admite consultas que contengan expresiones regulares, búsquedas de texto, geoespaciales, jsonschema o $expr filtros.
UpdateMejoras en y operadores Find
La versión 2.0 de Planner optimiza las operaciones fundamentalesfind, incluidos updatedelete, y find-and-modify los comandos. Las siguientes secciones con pestañas muestran las capacidades mejoradas de los índices, así como las mejoras en el rendimiento de las consultas con la versión 2.0 del planificador:
- Enhanced index support
-
La versión 2.0 de Planner añade compatibilidad con índices para los operadores de negación$nin, incluidos$ne,$not {eq}, y$not {in}, además de y. $type $elemMatch
Sample Document: { "x": 10, "y": [1, 2, 3] }
db.foo.createIndex({ "x": 1, "y": 1 })
db.foo.find({ "x": {$nin: [20, 30] }})
db.foo.find({"x":{ $type: "string" }})
db.foo.createIndex({"x.y": 1})
db.foo.find({"x":{$elemMatch:{"y":{$elemMatch:{"$gt": 3 }}}}})
La versión 2.0 de Planner utiliza índices dispersos o parciales incluso cuando no están presentes en $exists la expresión de consulta.
Sample Document: {"name": "Bob", "email": "example@fake.com" }
Using Planner Version 1.0, you can specify the command as shown below:
db.foo.find({email: "example@fake.com", email: {$exists: true}})
Using Planner Version 2.0, you can specify command without $exists:
db.foo.find({ email: "example@fake.com" })
La versión 2.0 de Planner utilizará índices parciales incluso cuando la condición de consulta no coincida exactamente con la expresión del filtro de índice parcial.
Sample Document: {"name": "Bob", "age": 34}
db.foo.createIndex({"age":1},{partialFilterExpression:{"age":{$lt:50}}})
With Planner Version 1.0, index is used only when the query condition meets the partial
index filter criterion:
db.foo.find({"age":{$lt:50}})
With Planner Version 2.0, index is used even when the query condition doesn’t meet the index
criterion:
db.foo.find({"age":{$lt:30}})
La versión 2.0 de Planner utiliza un escaneo parcial del índice con consultas de $elemMatch.
Sample Document: {"name": "Bob", "age": [34,35,36]}
db.foo.createIndex({"age":1},{partialFilterExpression:{"age":{$lt:50,$gt:20}}})
db.foo.find({age:{$elemMatch:{$lt:50,$gt:20}}})
La versión 2.0 de Planner incluye soporte para $regex el escaneo de índices sin necesidad de incluir el código de $hint la aplicación. $regexsolo admite la indexación en las búsquedas por prefijo.
Sample Document: { "x": [1, 2, 3], "y": "apple" }
db.foo.createIndex({ "x": 1, "y": 1 })
db.foo.find({"y":{ $regex: "^a" }})
La versión 2.0 de Planner mejora el rendimiento de las consultas que utilizan índices de varias teclas, con condiciones de igualdad en los campos de varias teclas.
Sample Document: {"x": [1, 2, 3],
"y": 5}
db.foo.createIndex({"x": 1, "y":1})
db.foo.find({"x": 2,
"y": {$gt: 1}}).limit(1)
La versión 2.0 de Planner mejora el rendimiento de las consultas que utilizan varios filtros, especialmente en colecciones con documentos de más de 8 KB.
Sample Document: {"x": 2,
"y": 4,
"z": 9,
"t": 99}
db.foo.find({$and: [{"x": {$gt : 1}, "y": {$gt : 3}, "z": {$lt : 10},
"t":{$lt : 100}}]})
La versión 2.0 de Planner mejora el rendimiento de las consultas cuando se utiliza el $in operador con un índice compuesto al eliminar la fase de clasificación.
Sample Document: {"x": 2,
"y": 4,
"z": 9,
"t": 99}
db.foo.createIndex({"x":1, "y":1})
db.foo.find({"x":2,
"y":$in:[1,2,3,4]}).sort({x:1,y:1})
También mejora el rendimiento de las consultas que utilizan índices de varias claves con $in elementos.
Sample Document: {"x": [1, 2, 3]}
db.foo.createIndex({"x": 1})
db.foo.find("x":{$in:[>100 elements]})
- Query performance improvements
-
La versión 2.0 de Planner mejora el rendimiento de las consultas que utilizan varios filtros, especialmente en colecciones con documentos de más de 8 KB.
Sample Document: {"x": 2,
"y": 4,
"z": 9,
"t": 99}
db.foo.find({$and: [{"x": {$gt : 1}, "y": {$gt : 3}, "z": {$lt : 10},
"t":{$lt : 100}}]})
La versión 2.0 de Planner mejora el rendimiento de las consultas cuando se utiliza el $in operador con un índice compuesto al eliminar la fase de clasificación.
Sample Document: {"x": 2,
"y": 4,
"z": 9,
"t": 99}
db.foo.createIndex({"x":1, "y":1})
db.foo.find({"x":2,
"y":$in:[1,2,3,4]}).sort({x:1,y:1})
También mejora el rendimiento de las consultas que utilizan índices de varias claves con $in elementos.
Sample Document: {"x": [1, 2, 3]}
db.foo.createIndex({"x": 1})
db.foo.find("x":{$in:[>100 elements]})
Planifique la API de filtrado de caché
El índice de texto no es compatible con el filtro de caché del plan.
La versión 2.0 de Planner añade compatibilidad con la función de filtro de índices que permite especificar una lista de índices que puede utilizar una forma de consulta específica. Se puede acceder a esta función a través de la API y se puede controlar desde el servidor. Si experimenta una regresión de consultas, esta función le ofrece una opción más rápida y flexible para mitigar el problema sin tener que modificar el código de la aplicación.
db.runCommand({ planCacheSetFilter: <collection>, query: <query>,
sort: <sort>, // optional,
indexes: [ <index1>, <index2>, ...],
comment: <any> // optional})
Para ver una lista de todos los filtros de la colección, utilice el siguiente comando:
db.runCommand(
{
planCacheListFilters: <collection>
}
)
Este comando muestra todos los filtros de índice de la colección. Ejemplo de salida:
{
"filters" : [
{
"query" : {a: "@", b: "@"},
"sort" : {a: 1},
"indexes" : [
<index1>,
...
]
},
...
],
"ok": 1
}
Puede utilizar dos campos nuevos del resultado del explain comando para analizar el filtrado de índices de la versión 2.0 del planificador: indexFilterSet yindexFilterApplied. indexFilterSetse establece en «verdadero» si hay un filtro de índice establecido en la colección que coincide con la forma de la consulta. indexFilterAppliedse establece en «verdadero» si, y solo si, la consulta aplicó un filtro de índice y eligió un plan utilizando un índice de la lista de filtros.
Puede borrar el filtro de índice con el siguiente comando:
db.runCommand(
{
planCacheClearFilters: <collection>>
query: <query pattern>, // optional
sort: <sort specification>, // optional
comment: <any>. //optional
}
)
Para borrar todos los filtros de la colección «foo», utilice el siguiente comando:
db.runCommand({planCacheClearFilters: "foo"})
Para borrar una forma de consulta específica de cualquier tipo, puedes copiar y pegar la forma de consulta desde el resultado deplanCacheListFilters:
db.runCommand({planCacheClearFilters: "foo", query: {a: @}})
Para borrar una forma de consulta específica con un campo específico por el que ordenar, puedes copiar y pegar la forma de consulta desde el resultado deplanCacheListFilters:
db.runCommand({planCacheClearFilters: "foo", query: {a: @},sort: {a: 1}})
Posibles diferencias de comportamiento entre las versiones 1.0, 2.0 y MongoDB del planificador
En algunos casos extremos, es posible que la versión 2.0 del planificador produzca resultados que varíen ligeramente de los resultados de MongoDB. En esta sección se describen algunos ejemplos de estas posibilidades.
- $(update) and $(projection)
-
En algunos casos, $(update) los $(projection) operadores de MongoDB pueden comportarse de forma diferente a la versión 1.0 del planificador de Amazon DocumentDB. A continuación se muestran algunos ejemplos:
db.students_list.insertMany( [ { _id: 5, student_ids: [ 100, 200 ], grades: [ 95, 100 ], grad_year: [ 2024, 2023 ] } ] )
db.students_list.updateOne({ student_ids: 100, grades: 100, grad_year: 2024 },
{ $set: { “grad_year.$”: 2025 } }
Planner versión 1.0: se actualiza en 2022
MongoDB — Campo de actualizaciones 2022
Planner versión 2.0 — Actualiza el campo 2021
db.col.insert({x:[1,2,3]})
db.col.update({$and:[{x:1},{x:3}]},{$set:{"x.$":500}})
Planner versión 1.0: actualiza aleatoriamente el primer elemento coincidente
MongoDB — Actualiza aleatoriamente el primer elemento coincidente
Planner versión 2.0: no realiza actualizaciones
db.col.insert({x:[1,2,3]})
db.col.find()
Planner versión 1.0: selecciona aleatoriamente el elemento coincidente
MongoDB — Selecciona aleatoriamente el elemento coincidente
Planner versión 2.0: no realiza ninguna selección
db.col.insert({x:100})
db.col.update({x:100},{x:100})
Planner versión 1.0: cambios en el recuento de cambios modificados
MongoDB: cambios de recuento modificados
Planner versión 2.0: el recuento modificado no cambia cuando se actualiza con el mismo valor.
Cuando se usa el $(update) operador$setOnInsert, la versión 1.0 del planificador y MongoDB arrojan un error, pero la versión 2.0 del planificador no.
Si se cambia el nombre de un campo que no existe, se $field produce un error en la versión 2.0 del planificador, mientras que no se producen actualizaciones en la versión 1.0 del planificador ni en MongoDB.
- Index behavior
-
La versión 2.0 de Planner arroja un error cuando $hint se aplica con un índice inadecuado, mientras que la versión 1.0 de Planner y MongoDB no lo hacen.
// Insert
db.col.insert({x:1})
db.col.insert({x:2})
db.col.insert({x:3})
// Create index on x with partialFilter Expression {x:{$gt:2}}
db.col.createIndex({x:1},{partialFilterExpression:{x:{$gt:2}}})
// Mongodb allows hint on the following queries
db.col.find({x:1}).hint("x_1")
// result is no documents returned because {x:1} is not indexed by the partial index
// Without $hint mongo should return {x:1}, thus the difference in result between COLSCAN and IXSCAN
DocumentDB will error out when $hint is applied on such cases.
db.col.find({x:1}).hint("x_1")
Error: error: {
"ok" : 0,
"operationTime" : Timestamp(1746473021, 1),
"code" : 2,
"errmsg" : "Cannot use Hint for this Query. Index is multi key index , partial index or sparse index and query is not optimized to use this index."
}
rs0:PRIMARY> db.runCommand({"planCacheSetFilter": "col", "query": { location: {$nearSphere: {$geometry: {type: "Point", coordinates: [1, 1]}}}}, "indexes": ["name_1"]})
{
"ok" : 0,
"operationTime" : Timestamp(1750815778, 1),
"code" : 303,
"errmsg" : "Unsupported query shape for index filter $nearSphere"
}
$nearno se puede utilizar $hint({“$natural”:1}) en la versión 2.0 del planificador.
// indexes present are index on x and geo index
rs0:PRIMARY> db.usarestaurants.getIndexes()
[
{
"v" : 4,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.usarestaurants"
},
{
"v" : 4,
"key" : {
"location" : "2dsphere"
},
"name" : "location_2dsphere",
"ns" : "test.usarestaurants",
"2dsphereIndexVersion" : 1
}
]
// Planner Version 2.0 will throw an error when $hint is applied with index "x_1"
rs0:PRIMARY> db.usarestaurants.find({ "location":{ "$nearSphere":{ "$geometry":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "$minDistance":1, "$maxDistance":2000 } } }, { "name":1 }).hint({"$natural": 1})
Error: error: {
"ok" : 0,
"operationTime" : Timestamp(1746475524, 1),
"code" : 291,
"errmsg" : "unable to find index for $geoNear query"
}
// Planner Version 1.0 and MongoDB will not throw an error
db.usarestaurants.find({ "location":{ "$nearSphere":{ "$geometry":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "$minDistance":1, "$maxDistance":2000 } } }, { "name":1 }).hint({"$natural": 1})
{ "_id" : ObjectId("681918e087dadfd99b7f0172"), "name" : "Noodle House" }
Si bien MongoDB admite escaneos completos de índices de expresiones regulares, la versión 2.0 del planificador admite el escaneo de índices de expresiones regulares solo en los campos de prefijo.
// index on x
db.col.createIndex({x:1})
// index scan is used only for prefix regexes
rs0:PRIMARY> db.col.find({x: /^x/}).explain()
{
"queryPlanner" : {
"plannerVersion" : 2,
"namespace" : "test.col",
"winningPlan" : {
"stage" : "IXSCAN",
"indexName" : "x_1",
"direction" : "forward",
"indexCond" : {
"$and" : [
{
"x" : {
"$regex" : /^x/
}
}
]
},
"filter" : {
"x" : {
"$regex" : /^x/
}
}
}
},
"indexFilterSet" : false,
"indexFilterApplied" : false,
"ok" : 1,
"operationTime" : Timestamp(1746474527, 1)
}
// COLSCAN is used for non-prefix regexes
rs0:PRIMARY> db.col.find({x: /x$/}).explain()
{
"queryPlanner" : {
"plannerVersion" : 2,
"namespace" : "test.col",
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"x" : {
"$regex" : /x$/
}
}
}
},
"indexFilterSet" : false,
"indexFilterApplied" : false,
"ok" : 1,
"operationTime" : Timestamp(1746474575, 1)
Existen algunas diferencias inherentes al uso de filtros de caché de planes con la versión 2.0 del planificador en comparación con MongoDB. Si bien la versión 2.0 del planificador no admite especificar la «proyección» y la «intercalación» con los filtros de caché del plan, MongoDB sí lo hace. Sin embargo, el filtro de índice de MongoDB solo está en memoria y se pierde tras el reinicio. La versión 2.0 de Planner conserva los filtros de índice mediante reinicios y parches.
- Others
-
El formato de los registros de auditoría de DML cuando se utiliza la versión 2.0 del planificador varía ligeramente del de la versión 1.0 del planificador.
command - db.col.find({x:1})
************** Audit logs generated ******************
// v1 format for dml audit logs
{"atype":"authCheck","ts":1746473479983,"timestamp_utc":"2025-05-05 19:31:19.983","remote_ip":"127.0.0.1:47022","users":[{"user":"serviceadmin","db":"test"}],"param":{"command":"find","ns":"test.col","args":{"batchSize":101,"filter":{"x":1},"find":"col","limit":18446744073709551615,"lsid":{"id":{"$binary":"P6RCGz9ZS4iWBSSHWXW15A==","$type":"4"},"uid":{"$binary":"6Jo8PisnEi3dte03+pJFjdCyn/5cGQL8V2KqaoWsnk8=","$type":"0"}},"maxScan":18446744073709551615,"singleBatch":false,"skip":0,"startTransaction":false},"result":0}}
// v2 formal for dml audit logs
{"atype":"authCheck","ts":1746473583711,"timestamp_utc":"2025-05-05 19:33:03.711","remote_ip":"127.0.0.1:37754","users":[{"user":"serviceadmin","db":"test"}],"param":{"command":"find","ns":"test.col","args":{"find":"col","filter":{"x":1},"lsid":{"id":{"$binary":"nJ88TGCSSd+BeD2+ZtrhQg==","$type":"4"}},"$db":"test"},"result":0}}
-
La condición del índice como parte del plan explicativo:
rs0:PRIMARY> db.col.createIndex({index1:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1,
"operationTime" : Timestamp(1761149251, 1)
}
La versión 2.0 de Planner explica el resultado del plan, mostrando la condición del índice y el filtro:
rs0:PRIMARY> db.col.find({$and:[{price:{$eq:300}},{item:{$eq:"apples"}}]}).explain()
{
"queryPlanner" : {
"plannerVersion" : 2,
"namespace" : "test.col",
"winningPlan" : {
"stage" : "IXSCAN",
"indexName" : "price_1",
"direction" : "forward",
"indexCond" : {
"$and" : [
{
"price" : {
"$eq" : 300
}
}
]
},
"filter" : {
"$and" : [
{
"item" : {
"$eq" : "apples"
}
}
]
}
}
},
"indexFilterSet" : false,
"indexFilterApplied" : false,
"ok" : 1,
"operationTime" : Timestamp(1761149497, 1)
}
La versión 1.0 de Planner explica el resultado del plan:
rs0:PRIMARY> db.col.find({$and:[{price:{$eq:300}},{item:{$eq:"apples"}}]}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.col",
"winningPlan" : {
"stage" : "IXSCAN",
"indexName" : "price_1",
"direction" : "forward"
}
},
"ok" : 1,
"operationTime" : Timestamp(1761149533, 1)
}
La versión 2.0 de Planner cierra la brecha de comportamiento con MongoDB
Hay algunas áreas en las que la versión 2.0 del planificador cierra las brechas de comportamiento de MongoDB:
La versión 2.0 de Planner permite la búsqueda de índices numéricos en matrices aplanadas para: $elemMatch
doc: {"x" : [ [ { "y" : 1 } ] ] }
// Planner Version 2 and mongo
> db.bar.find({"x.0": {$elemMatch: {y: 1}}})
{ "_id" : ObjectId("68192947945e5846634c455a"), "x" : [ [ { "y" : 1 } ] ] }
> db.bar.find({"x": {$elemMatch: {"0.y": 1}}})
{ "_id" : ObjectId("68192947945e5846634c455a"), "x" : [ [ { "y" : 1 } ] ] }
//Whereas Planner Version 1 wouldn't return any results.
> db.bar.find({"x.0": {$elemMatch: {y: 1}}})
> db.bar.find({"x": {$elemMatch: {"0.y": 1}}})
Si bien la versión 1.0 del planificador excluía las cadenas en la proyección, el comportamiento del planificador de la versión 2.0 se alinea con MongoDB y las trata como valores literales»
// Planner V2/ MongoDB
> db.col.find()
{ "_id" : ObjectId("681537738aa101903ed2fe05"), "x" : 1, "y" : 1 }
> db.col.find({},{x:"string"})
{ "_id" : ObjectId("681537738aa101903ed2fe05"), "x" : "string" }
// Planner V1 treats strings as exclude in projection
rs0:PRIMARY> db.col.find()
{ "_id" : ObjectId("68153744d42969f11d5cca72"), "x" : 1, "y" : 1 }
rs0:PRIMARY> db.col.find({},{x:"string"})
{ "_id" : ObjectId("68153744d42969f11d5cca72"), "y" : 1 }
La versión 2.0 de Planner, como MongoDB, no permite la proyección en los mismos campos «x» y «x.a»:
// Planner version 2/MongoDB will error out
> db.col.find()
{ "_id" : ObjectId("68153da2012265816bc9ba23"), "x" : [ { "a" : 1 }, 3 ] }
db.col.find({},{"x.a":1,"x":1}) // error
// Planner Version 1 does not error out
db.col.find()
{ "_id" : ObjectId("68153da2012265816bc9ba23"), "x" : [ { "a" : 1 }, 3 ] }
db.col.find({},{"x.a":1,"x":1})
{ "_id" : ObjectId("68153d60143af947c720d099"), "x" : [ { "a" : 1 }, 3 ] }
La versión 2.0 de Planner, como MongoDB, permite la proyección en subdocumentos:
// Planner Version2/MongoDB supports projections on subdocuments
db.col.find()
{ "_id" : ObjectId("681542d8f35ace71f0a50004"), "x" : [ { "y" : 100 } ] }
> db.col.find({},{"x":{"y":1}})
{ "_id" : ObjectId("681542b7a22d548e4ac9ddea"), "x" : [ { "y" : 100 } ] }
// Planner V1 throws error if projection is subdocument
db.col.find()
{ "_id" : ObjectId("681542d8f35ace71f0a50004"), "x" : [ { "y" : 100 } ] }
rs0:PRIMARY> db.col.find({},{"x":{"y":1}})
Error: error: {
"ok" : 0,
"operationTime" : Timestamp(1746223914, 1),
"code" : 2,
"errmsg" : "Unknown projection operator y"
}
Con la versión 2.0 de Planner, como MongoDB, la proyección no admite campos después del operador: $
// Mongo and Planner Version 2 will error out
db.col.find()
{ "_id" : ObjectId("68155fa812f843439b593f3f"), "x" : [ { "a" : 100 } ] }
db.col.find({"x.a":100},{"x.$.a":1}) - // error
// v1 will not error out
db.col.find()
{ "_id" : ObjectId("68155fa812f843439b593f3f"), "x" : [ { "a" : 100 } ] }
db.col.find({"x.a":100},{"x.$.a":1})
{ "_id" : ObjectId("68155dee13b051d58239cd0a"), "x" : [ { "a" : 100 } ] }
La versión 2.0 de Planner, como MongoDB, permite el uso de: $hint
// v1 will error out on $hint if there are no filters
db.col.find({}).hint("x_1")
Error: error: {
"ok" : 0,
"operationTime" : Timestamp(1746466616, 1),
"code" : 2,
"errmsg" : "Cannot use Hint for this Query. Index is multi key index , partial index or sparse index and query is not optimized to use this index."
}
// Mongo and Planner Version 2 will allow $hint usage
db.col.find({}).hint("x_1")
{ "_id" : ObjectId("6818f790d5ba9359d68169cf"), "x" : 1 }