sql >> Databáze >  >> NoSQL >> MongoDB

Dotaz MongoDB uvnitř vnořeného pole

Při každém zápase proti jednomu pole, musíte pouze vyjádřit cestu k vašemu poli pomocí tečkové notace:

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

Jak je vysvětleno v MongoDB dokumentace , pro pole (jako wishlist ) to bude odpovídat dokumentu, pokud existuje vnořený dokument v poli odpovídá hodnotě pole.

Vezměte prosím na vědomí, že pokud potřebujete zápas s několika pole, musíte použít buď:

  • $elemMatch pokud by všechna odpovídající pole měla patřit stejnému vnořený dokument;
  • nebo více polí vyjádřených pomocí tečkové notace, pokud se různá pole nemusí shodovat se stejným vnořeným dokumentem.

Porovnejte prosím výstup těchto dvou dotazů, abyste to pochopili:

> 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. Provozní správa databáze

  2. php ovladač mongodb, nikdy nenačten

  3. Automatické mazání dokumentů z mongodb po zadané době

  4. Jak používat Memcached s rámcem Yii2