1つと対戦する フィールドの場合、ドット表記を使用してフィールドへのパスを表現するだけです。
> db.user.find({"profile.wishlist._id": 2})
で説明されているようにMongoDBドキュメント
、配列の場合(wishlist
など) ) any の場合、これはドキュメントと一致します 配列内のサブドキュメントはフィールド値と一致します。
いくつかと照合する必要がある場合は注意してください フィールドの場合、次のいずれかを使用する必要があります:
-
$elemMatch
一致するすべてのフィールドが同じに属する必要がある場合 サブドキュメント; - または さまざまなフィールドが同じサブドキュメントと一致する必要がない場合は、ドット表記を使用して表現された複数のフィールド。
これら2つのクエリの出力を比較して、これを把握してください。
> 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