Pianificatore di interrogazioni - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Pianificatore di interrogazioni

Il nuovo pianificatore di query per Amazon DocumentDB (planner versione 2.0) offre funzionalità avanzate di ottimizzazione delle query e prestazioni migliorate. La versione 2.0 di Planner per Amazon DocumentDB 5.0 offre prestazioni fino a 10 volte superiori rispetto alla versione precedente per quanto riguarda l'findutilizzo update e gli operatori con indici. I miglioramenti delle prestazioni derivano principalmente dall'utilizzo di piani di indicizzazione più ottimali e dall'abilitazione del supporto per la scansione degli indici per operatori come gli operatori di negazione (,) e nested. $neq $nin $elementMatch Le query di Planner versione 2.0 vengono eseguite più velocemente grazie a migliori tecniche di stima dei costi, algoritmi ottimizzati e maggiore stabilità. La versione 2.0 di Planner supporta anche il filtro Plan Cache, che migliora la APIs stabilità del pianificatore. Con questa funzionalità, Amazon DocumentDB 5.0 ora offre la possibilità di scegliere tra le diverse versioni di Query Planner.

Prerequisiti

I seguenti prerequisiti si applicano alla versione 2.0 del planner:

  • La versione 2.0 di Planner è disponibile in tutte le regioni in cui è disponibile la versione 5.0 del motore.

  • Per scegliere di utilizzare la versione 2.0 come pianificatore di query predefinito, il cluster deve avere la versione della patch del motore 3.0.15902 o successiva di Amazon DocumentDB versione 5.0. Per la procedura di aggiornamento alla patch della versione più recente del motore, consulta. Esecuzione di un aggiornamento della patch alla versione del motore di un cluster

  • Per impostare la versione 2.0 del planner come pianificatore di query predefinito, sono necessarie le autorizzazioni IAM per aggiornare i gruppi di parametri del cluster.

Selezione della versione 2.0 del planner come pianificatore di query predefinito

Utilizza i seguenti passaggi per selezionare 2.0 come pianificatore di query predefinito dalla console o dalla CLI:

  • Segui i passaggi indicati Modifica dei parametri del cluster Amazon DocumentDB per modificare il gruppo di parametri del cluster.

  • Per il parametro intitolato 'PlannerVersion', modifica il valore su 2.0, che indica la versione 2.0 del planner.

  • Seleziona Applica immediatamente (selezionando Applica al riavvio la selezione verrà resa inefficace fino al successivo riavvio del cluster).

Best practice

Per i risultati previsti, utilizza le seguenti best practice quando applichi la versione 2.0 di planner:

  • In un cluster globale, selezionate lo stesso plannerVersion valore (1.0 o 2.0) nei gruppi di parametri del cluster per entrambe le regioni. Tieni presente che la selezione di versioni diverse del planner nelle aree primarie e secondarie può causare prestazioni e comportamento delle query incoerenti.

  • L'aggiornamento alla versione 2.0 di Planner durante una finestra di manutenzione programmata o durante periodi di traffico ridotto sarà il metodo meno problematico, in quanto potrebbe verificarsi un aumento dei tassi di errore se la versione del planner viene modificata quando i carichi di lavoro sono in esecuzione attiva.

  • La versione 2.0 di Planner funziona in modo ottimale con la shell MongoDB versione 5.0.

Limitazioni

Le seguenti limitazioni si applicano alla versione 2.0 di Planner:

  • La versione 2.0 di Planner non è supportata nei cluster elastici, che ritorneranno alla versione 1.0 di Planner.

  • La versione 2.0 di Planner non è supportata per l'aggregazione e i comandi distinti, che torneranno alla versione 1.0 di Planner.

  • Le query che contengono regex, text search, geospatial, jsonschema o $expr nei filtri non sono supportate con plan cache filter nella versione 2.0 di planner.

FindUpdateMiglioramenti a e operatori

La versione 2.0 di Planner ottimizza le operazioni fondamentali tra cuifind, updatedelete, e find-and-modify i comandi. Le seguenti sezioni a schede mostrano le funzionalità avanzate per gli indici, nonché i miglioramenti delle prestazioni delle query con la versione 2.0 di Planner:

Enhanced index support
  • La versione 2.0 di Planner aggiunge il supporto degli indici per gli operatori di negazione$nin, tra cui,, e $ne$not {eq}, nonché and. $not {in} $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 versione 2.0 di Planner utilizza indici sparsi o parziali anche quando $exists non sono presenti nell'espressione di query.

    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 versione 2.0 di Planner utilizzerà indici parziali anche quando la condizione di interrogazione non corrisponde esattamente all'espressione del filtro dell'indice parziale.

    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 versione 2.0 di Planner utilizza la scansione parziale dell'indice con le query $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 versione 2.0 di Planner include il supporto per la scansione degli indici$regex, senza la necessità di inserire il codice dell'applicazione. $hint $regexsupporta l'indice solo nelle ricerche per prefissi.

    Sample Document: { "x": [1, 2, 3], "y": "apple" } db.foo.createIndex({ "x": 1, "y": 1 }) db.foo.find({"y":{ $regex: "^a" }})
  • La versione 2.0 di Planner migliora le prestazioni delle query che coinvolgono indici a più chiavi, con condizioni di uguaglianza su campi a più chiavi.

    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 versione 2.0 di Planner migliora le prestazioni delle query che coinvolgono più filtri, in particolare nelle raccolte con documenti di dimensioni superiori a 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 versione 2.0 di Planner migliora le prestazioni delle query quando si utilizza l'$inoperatore con un indice composto eliminando la fase di ordinamento.

    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})

    Migliora inoltre le prestazioni delle query che utilizzano indici a più chiavi con elementi. $in

    Sample Document: {"x": [1, 2, 3]} db.foo.createIndex({"x": 1}) db.foo.find("x":{$in:[>100 elements]})
Query performance improvements
  • La versione 2.0 di Planner migliora le prestazioni delle query che coinvolgono più filtri, in particolare nelle raccolte con documenti di dimensioni superiori a 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 versione 2.0 di Planner migliora le prestazioni delle query quando si utilizza l'$inoperatore con un indice composto eliminando la fase di ordinamento.

    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})

    Migliora inoltre le prestazioni delle query che utilizzano indici a più chiavi con elementi. $in

    Sample Document: {"x": [1, 2, 3]} db.foo.createIndex({"x": 1}) db.foo.find("x":{$in:[>100 elements]})

Pianifica l'API del filtro della cache

Nota

L'indice di testo non è supportato con il filtro della cache del piano.

  • La versione 2.0 di Planner aggiunge il supporto per la funzionalità di filtro degli indici che consente di specificare un elenco di indici utilizzabili da una forma di query specifica. Questa funzionalità è accessibile tramite l'API e può essere controllata dal lato server. Se si verifica una regressione delle query, questa funzionalità offre un'opzione più rapida e flessibile per mitigare il problema senza dover modificare il codice dell'applicazione.

    db.runCommand({ planCacheSetFilter: <collection>, query: <query>, sort: <sort>, // optional, indexes: [ <index1>, <index2>, ...], comment: <any> // optional})

    Per elencare tutti i filtri della raccolta, utilizzate il seguente comando:

    db.runCommand( { planCacheListFilters: <collection> } )

    Questo comando mostra tutti i filtri indicizzati della raccolta. Output di esempio:

    { "filters" : [ { "query" : {a: "@", b: "@"}, "sort" : {a: 1}, "indexes" : [ <index1>, ... ] }, ... ], "ok": 1 }
  • È possibile utilizzare due nuovi campi dall'output del explain comando per analizzare il filtraggio degli indici di Planner versione 2.0: indexFilterSet e. indexFilterApplied indexFilterSetè impostato su «true» se nella raccolta è impostato un filtro indice che corrisponde alla forma della query. indexFilterAppliedè impostato su «true» se e solo se la query ha applicato un filtro di indice e ha scelto un piano utilizzando un indice nell'elenco dei filtri.

    È possibile cancellare il filtro dell'indice con il seguente comando:

    db.runCommand( { planCacheClearFilters: <collection>> query: <query pattern>, // optional sort: <sort specification>, // optional comment: <any>. //optional } )

    Per cancellare tutti i filtri sulla raccolta «foo», usa il seguente comando:

    db.runCommand({planCacheClearFilters: "foo"})

    Per cancellare una forma di interrogazione specifica con qualsiasi tipo, puoi copiare e incollare la forma di interrogazione dall'output diplanCacheListFilters:

    db.runCommand({planCacheClearFilters: "foo", query: {a: @}})

    Per cancellare una forma di interrogazione specifica con un campo specifico in base al quale ordinare, è possibile copiare e incollare la forma di interrogazione dall'output diplanCacheListFilters:

    db.runCommand({planCacheClearFilters: "foo", query: {a: @},sort: {a: 1}})

Potenziali differenze di comportamento tra la versione 1.0, 2.0 e MongoDB di Planner

In alcuni casi limite, è possibile che la versione 2.0 di Planner produca risultati leggermente diversi dai risultati di MongoDB. Questa sezione illustra alcuni esempi di queste possibilità.

$(update) and $(projection)
  • In alcuni casi, $(update) gli $(projection) operatori di MongoDB possono comportarsi in modo diverso rispetto al planner di Amazon DocumentDB versione 1.0. Di seguito sono riportati alcuni esempi:

    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 versione 1.0 — Campo aggiornamenti 2022

    • MongoDB — Campo degli aggiornamenti 2022

    • Planner versione 2.0 — Campo aggiornamenti 2021

  • db.col.insert({x:[1,2,3]}) db.col.update({$and:[{x:1},{x:3}]},{$set:{"x.$":500}})
    • Planner versione 1.0: aggiorna in modo casuale il primo elemento abbinato

    • MongoDB — Aggiorna casualmente il primo elemento abbinato

    • Planner versione 2.0 — Non effettua aggiornamenti

  • db.col.insert({x:[1,2,3]}) db.col.find()
    • Planner versione 1.0: seleziona in modo casuale l'elemento corrispondente

    • MongoDB — Seleziona casualmente l'elemento corrispondente

    • Planner versione 2.0 — Non effettua una selezione

  • db.col.insert({x:100}) db.col.update({x:100},{x:100})
    • Planner versione 1.0 — Modifiche al conteggio modificate

    • MongoDB — Modifiche al conteggio modificate

    • Planner versione 2.0 — Il conteggio modificato non cambia quando viene aggiornato con lo stesso valore.

  • Quando si utilizza $(update) operator con$setOnInsert, planner versione 1.0 e MongoDB generano un errore, ma la versione 2.0 di planner no.

  • La ridenominazione di un campo inesistente in $field genera un errore nella versione 2.0 di Planner, mentre non produce aggiornamenti nella versione 1.0 di Planner e MongoDB.

Index behavior
  • La versione 2.0 di Planner genera un errore quando $hint viene applicata con un indice non adatto, mentre la versione 1.0 di Planner e MongoDB no.

    // 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" }
  • $nearnon può essere utilizzato nella versione 2.0 di Planner. $hint({“$natural”:1})

    // 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" }
  • Mentre MongoDB supporta scansioni complete dell'indice regex, la versione 2.0 di planner supporta la scansione dell'indice regex solo sui campi del prefisso.

    // 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)
  • Esistono alcune differenze intrinseche nell'utilizzo dei filtri della cache del piano con la versione 2.0 di Planner rispetto a MongoDB. Sebbene la versione 2.0 di Planner non supporti la specificazione di «proiezione» e «confronto» con i filtri della cache del piano, MongoDB sì. Tuttavia, il filtro indice MongoDB è solo in memoria e viene perso dopo il riavvio. La versione 2.0 di Planner mantiene i filtri degli indici tramite riavvii e patch.

Others
  • Il formato dei log di controllo DML quando si utilizza la versione 2.0 di planner varia leggermente da quello della versione 1.0 di planner.

    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 condizione dell'indice come parte del piano di spiegazione:

    rs0:PRIMARY> db.col.createIndex({index1:1}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1, "operationTime" : Timestamp(1761149251, 1) }

    La versione 2.0 di Planner spiega l'output del piano, visualizza la condizione dell'indice e il 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 versione 1.0 di Planner spiega l'output del piano:

    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 versione 2.0 di Planner colma il divario comportamentale con MongoDB

Ci sono alcune aree in cui la versione 2.0 di Planner colma le lacune comportamentali di MongoDB:

  • La versione 2.0 di Planner consente la ricerca di indici numerici su array appiattiti per: $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}}})
  • Mentre la versione 1.0 di planner escludeva le stringhe nella proiezione, il comportamento della versione 2.0 di planner si allinea a MongoDB e le tratta come valori letterali»

    // 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 versione 2.0 di Planner, come MongoDB, non consente la proiezione sugli stessi campi «x» e «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 versione 2.0 di Planner, come MongoDB, consente la proiezione su documenti secondari:

    // 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 versione 2.0 di Planner, come MongoDB, la proiezione non supporta i campi dopo l'operatore: $

    // 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 versione 2.0 di Planner, come MongoDB, consente l'utilizzo di: $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 }