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