sql >> Database >  >> NoSQL >> MongoDB

MongoDB-query binnen een geneste array

Zoals je alleen tegen één veld hoeft u alleen het pad naar uw veld uit te drukken met behulp van puntnotatie:

> db.user.find({"profile.wishlist._id": 2})

Zoals uitgelegd in de MongoDB-documentatie , voor arrays (zoals wishlist ) dit komt overeen met een document indien enig subdocument in de array komt overeen met de veldwaarde.

Houd er rekening mee dat als je moet matchen met verschillende velden, moet u een van de volgende gebruiken:

  • $elemMatch als alle overeenkomende velden bij dezelfde moeten horen subdocument;
  • of meerdere velden uitgedrukt met de puntnotatie als de verschillende velden niet hoeven te matchen met hetzelfde subdocument.

Vergelijk de uitvoer van deze twee zoekopdrachten om dit te begrijpen:

> db.user.find({"profile.wishlist._id": 2, "profile.wishlist.name": "a1"})
//                                      ^                            ^^
//                              will return your document even if the was no 
//                              subdocument having both _id=2 and name=a1
> db.user.find({"profile.wishlist": {$elemMatch: { _id: 2, name: "a1"}}})
//                                                      ^         ^^
//                                         no result as there was no subdocument
//                                         matching  _both_ _id=2 and name=a1



  1. Hoe gaat ConnectionMultiplexer om met verbroken verbindingen?

  2. Veel op veel met mangoest

  3. MongoDB Capped Collection verwijdert geen documenten

  4. MongoDB vergelijkt alleen datums zonder tijden