私は $in
演算子は、配列内のアイテムの存在を検索するように見えますが、アイテムが配列の最初の位置にある場合にのみ一致するものを検索します。
例えば:
{
"_id" : ObjectId("0"),
"imgs" : [
"http://foo.jpg",
"http://bar.jpg",
"http://moo.jpg",
]
},
{
"_id" : ObjectId("1"),
"imgs" : [
"http://bar.jpg",
"http://foo.jpg",
"http://moo.jpg",
]
}
次のようなクエリを探しています。
db.products.find({"imgs[0]": "http://foo.jpg"})
これは返されます/すべきです ObjectId("0")
だがしかし ObjectId("1")
、配列内の最初の画像と照合するだけです。
どうすればこれを達成できますか?私はただの単一の文字列を含む別のフィールドを作成できることを知っています firstImg
しかし、それは私がここにいるものではありません。
回答:
回答№1の59私はあなたが欲しいと思う imgs.0
。例えば、あなたのサンプルドキュメントが与えられたら、あなたは言いたい: db.products.find({"imgs.0": "http://foo.jpg"})
配列インデックスの参照は、第1レベルの配列でのみ機能することに注意してください。 Mongoは、配列インデックスの検索をサポートしていません。
回答№2については9
配列インデックスにドット表記を使用できます。
db.products.find({"imgs.0": "http://foo.jpg"})
以下は、関連するドキュメントからの抜粋です ドット表記法.
MongoDBは、ドット表記を使用して配列の要素にアクセスし、サブドキュメントのフィールドにアクセスします。
ゼロベースのインデックス位置で配列の要素にアクセスするには、配列名をドット(。)とゼロベースのインデックス位置で連結し、引用符で囲みます。
"<array>.<index>"
さらに、ここに関連するリンクがあります 配列ドキュメント.