Jak tylko grasz przeciwko jednemu pole, musisz tylko podać ścieżkę do swojego pola za pomocą notacji kropkowej:
> db.user.find({"profile.wishlist._id": 2})
Jak wyjaśniono w Dokumentacja MongoDB
, dla tablic (takich jak wishlist
) dopasuje dokument, jeśli jakikolwiek poddokument w tablicy odpowiada wartości pola.
Pamiętaj, że jeśli chcesz dopasować się do kilku pola, musisz użyć:
$elemMatch
czy wszystkie pasujące pola powinny należeć do tego samego poddokument;- lub wiele pól wyrażonych za pomocą notacji kropkowej, jeśli różne pola nie muszą być zgodne z tym samym dokumentem podrzędnym.
Porównaj wyniki tych dwóch zapytań, aby to zrozumieć:
> 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