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

mongodb $hvor forespørgsel for at hente underdokumentindhold

Brug af $where operatør bør undgås i de fleste tilfælde, da det både vil påkalde en fuld samlingsscanning, uanset hvilke andre forhold der eventuelt kunne bruge et indeksvalg.

Derudover kalder du JavaScript-fortolkeren over hvert resultatdokument, hvilket vil være betydeligt langsommere end indbygget kode. Læs advarslerne på manualsiden, de er der af en grund

Hvor det er muligt, prøv venligst at bruge .aggregate() i stedet for denne type sammenligning. I dit tilfælde er det absolut den bedre mulighed:

db.foo.aggregate([
    { "$match": { "flag": true } },
    { "$unwind": "$versions" },
    { "$project": {
        "versions": "$versions"
        "same": { "$eq": [ "$versions.version", "$defaultVersion" ] }
    }}
    { "$match": { "same": true } },
    { "$project": {
        "_id": 0,
        "versions": 1
    }}
])

Dette giver dig mulighed for først at filtrere din forespørgsel efter "flag"-tilstanden og derefter inspicere hvert medlem af arrayet for at sammenligne, om de to felter er ens.

Hvis det er nødvendigt, kan du derefter rulle de matchede array-elementer tilbage til et array, hvor der er mere end én match. Men jeg tror ikke, det er dit krav.



  1. Returner den faktiske type af et felt i MongoDB

  2. Fremtrædende træk ved MapReduce – Vigtigheden af ​​MapReduce

  3. MongoDb-forespørgsler og system.linq

  4. Hvordan man får mongodb version fra mongoose