別の質問へのコメントとしてこれを尋ね、mongodb-user にも質問を投稿しました。今のところ回答がないので、別の質問をすることに頼っています。
ドキュメントには次のように記載されています。
フィールドが配列を保持している場合、 $in 演算子は、指定された配列の値と一致する要素を少なくとも 1 つ含む配列をフィールドが保持しているドキュメントを選択します (例: 、など)。
私は使用しています:
mongod --version:
db version v2.2.2, pdfile version 4.5
Thu May 30 12:19:12 git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
mongo --version:
MongoDB shell version: 2.0.4
MongoDB シェルの場合:
db.nested.insert({'level1': {'level2': [['item00', 'item01'], ['item10', 'item11']]}})
ドキュメントに従って動作するはずのクエリと、それらが生成する結果のリストを次に示します。
なぜこれが機能しないのですか?
> db.nested.findOne({'level1.level2.0': 'item00'})
null
なぜ $all が必要なのですか?
> db.nested.findOne({'level1.level2.0': {'$all': ['item00']}})
{
"_id" : ObjectId("51a7a4c0909dfd8872f52ed7"),
"level1" : {
"level2" : [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
]
}
}
次の少なくとも 1 つが機能するはずですよね?
> db.nested.findOne({'level1.level2.0': {'$in': ['item00']}})
null
> db.nested.findOne({'level1.level2': {'$in': ['item00']}})
null
何か案は?クエリ構文が宣伝どおりに機能しない場合は、MongoDB を放棄することを検討しています。
ありがとう!