MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Indici composti ottimali per $esiste:true (indici sparsi)

Quello che sembra non capire qui è che $exists non può "prendere" un indice in alcun modo, anche se sparso. Come dice la documentazione stessa:

L'esempio fornito in quelle pagine è un { "$exists": false } interrogazione. Ma qui la condizione logica inversa non fa alcuna differenza.

Per ottenere il "pieno vantaggio" di un indice "sparso", è necessario considerare il "tipo" di dati che contiene ed eseguire query in modo appropriato.

Per numerico, qualcosa come:

db.collection.find({ "a": "foobar", "b": { "$gte": -9999, "$lte": 9999 } })

Che usa un indice e quello sparso. O per testo basato:

db.collection.find({ "a": "foobar", "b": /.+/ })

Che utilizzerà anche l'indice sparse e guarderà solo quelli in cui è stata definita "b".

Per "array" quindi "fai attenzione". Poiché il valore in esame è probabilmente uno dei precedenti a meno che tu non l'abbia fatto:

db.collection.insert({ "a": 1, "b": [[]] })

Dove allora va bene:

db.ab.find({ "a": 1, "b": { "$type": 4 } })

Ma in realtà non utilizzerà l'indice "sparse" per gli stessi motivi $exists non funzionerà qui.

Quindi devi capire cosa significano i termini qui e "interroga in modo appropriato" per utilizzare le definizioni dell'indice che crei se ti aspetti le massime prestazioni.

Questi sono esempi chiari che puoi testare tu stesso e vedere che i risultati sono veri. Vorrei che la documentazione di base fosse più chiara su questi punti, ma sono anche consapevole che molti hanno cercato di contribuire (e hanno prodotto spiegazioni eccellenti), ma finora nessuna di queste è stata inclusa.

Immagino sia per questo che lo stai chiedendo qui.