MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Abfrage in einem verschachtelten Array

Da du nur gegen einen spielst Feld, müssen Sie nur den Pfad zu Ihrem Feld mit Punktnotation ausdrücken:

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

Wie im erklärt MongoDB-Dokumentation , für Arrays (wie wishlist ) stimmt dies mit einem Dokument überein, falls irgendein Unterdokument im Array stimmen mit dem Feldwert überein.

Bitte beachten Sie, dass Sie gegen mehrere abgleichen müssen Felder müssen Sie entweder verwenden:

  • $elemMatch wenn alle übereinstimmenden Felder zum gleichen gehören sollen Unterdokument;
  • oder mehrere Felder, die mit der Punktnotation ausgedrückt werden, wenn die verschiedenen Felder nicht mit demselben Filialdokument übereinstimmen müssen.

Bitte vergleichen Sie die Ausgabe dieser beiden Abfragen, um dies zu verstehen:

> 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