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

Mongoose får dokumenter, der matcher arrayet

Så længe du er klar over, at du matcher på ObjectId og faktisk ikke noget i den refererede samling, kan du bruge $in operatør:

db.collection.find({ "members": { "$in": [ "some id 1", "some id 2" ] } })

Hvor det selvfølgelig er dine faktiske ObjectId-værdier.

Men hvis du virkelig mener et dokument, der har præcis det array, så passerer du bare i arrayet:

db.collection.find({ "members": [ "some id 1", "some id 2" ] })

Og hvis det skal have begge elementer, men kunne have andre, skal du i øjeblikket bruge en $og udtryk:

db.collection.find({ "$and": [ 
    { "members": "some id 1" },
    { "members": "some id 2" } 
]})

Men fra version 2.6 og frem kan du korrekt bruge $all operatør til effektivt at gøre det samme:

db.collection.find({ "members": { "$all": [ "some id 1", "some id 2" ] } })

Den anden form matcher kun disse to elementer, men i vilkårlig rækkefølge. Så der er to tilgange:

db.collection.find({ "$or": [
    { "members": [ "some id 1", "some id 2" ] },
    { "members": [ "some id 2", "some id 1" ] }
]})

Dette bruger en logisk $or at sige, at arrayet skal være nøjagtigt, men kan arrangeres på begge måder. Og den anden tilgang:

db.collection.find({ "$and": [ 
    { "members": "some id 1" },
    { "members": "some id 2" }
    { "members": { "$size": 2 } }
]})

Så dette ville bruge $size for at sikre, at når arrayet indeholdt begge de elementer, der matchede, havde det også kun to elementer. Hvilket er en pænere syntaks end at bruge $or , især for større arrays.

Og i fremtidige udgivelser bliver dette som nævnt endnu renere:

db.collection.find({ "$and": [ 
    { "members": { "$all": [ "some id 1", "some id 2" ] } },
    { "members": { "$size": 2 } }
]})

Det dækker nogenlunde enhver fortolkning




  1. MongoDB - for mange data til sort() uden indeksfejl

  2. Fjern et underdokument indlejret i et array i MongoDB

  3. Funktion ikke understøttet:$tekst i dokument db med mongodb 3.6-kompatibilitet

  4. Har brug for en løsning til opslag af en streng til objectID fremmedfelt