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

mongodb ordina e regex query in modo efficiente

Potresti provare a creare un indice di testo su country_lc , region_lc e city_lc campi:

db.reviews.ensureIndex( { "country_lc": "text" } )
db.reviews.ensureIndex( { "region_lc": "text" } )
db.reviews.ensureIndex( { "city_lc": "text" } )

Indici di testo sono una nuova funzionalità in MongoDB 2.4. Sono stati aggiunti per supportare la ricerca di testo di contenuti di stringhe nei documenti di una raccolta. Dai un'occhiata alla documentazione ufficiale per suggerimenti sulle prestazioni.

Inoltre, puoi provare a riscrivere la query come

db.location.find(
     { "docType": {"$in": [ "country", "region", "city" ]},
       "$or": [
         { "country_lc": /^unit/ },
         { "region_lc": /^unit/ },
         { "city_lc": /^unit/ },
       ]
    }, 
    { "country": 1, "region": 1, "city": 1, "docType" :1 }
   ).sort({ "country_lc" :1, "region_lc": 1, "city_lc":1 })

(Attenzione :Questo è o non è equivalente alla tua query, a seconda della struttura dei documenti.)