sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-fråga i en kapslad array

Som du bara matchar mot ett fältet behöver du bara uttrycka sökvägen till ditt fält med hjälp av punktnotation:

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

Som förklaras i MongoDB-dokumentation , för arrayer (som wishlist ) detta kommer att matcha ett dokument om något underdokument i arrayen matchar fältvärdet.

Observera att om du behöver matcha mot flera fält måste du använda antingen:

  • $elemMatch om alla matchande fält ska tillhöra samma underdokument;
  • eller flera fält uttryckta med hjälp av punktnotationen om de olika fälten inte behöver matcha mot samma underdokument.

Vänligen jämför resultatet av dessa två frågor för att få ett grepp om detta:

> 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. finns det ett mongoose connect error callback

  2. Läs specifika fältvärden från MongodbC#

  3. gruppinsamlingsdata efter flera fält mongodb

  4. Mongodb aggregerar (räknas) på flera fält samtidigt