我有这个系列:
{
"title": "First Item",
"attributes": [
{
"id": "1",
"text": "Alpha"
},
{
"id": "2",
"text": "Bravo"
},
{
"id": "3",
"text": "Charlie"
}
]
},
{
"title": "Second Item",
"attributes": [
{
"id": "1",
"text": "Alpha"
},
{
"id": "2",
"text": "Bravo"
},
{
"id": "3",
"text": "Tango"
}
]
}
尝试使用这些值进行搜索" attributes.text"字段:
{ "Alpha", "Bravo", "Charlie", "Delta" }
我只想找到" First Item"至少包含这些密钥但不包含其他密钥的文档。
但尝试这些值:
{ "Alpha", "Bravo", "Delta" }
或
{ "Alpha", "Bravo" }
我不想要找到任何结果(因为#34; Charlie"缺失)。
谢谢
答案 0 :(得分:1)
使用$in
运算符匹配attributes
对象数组中的值。以下查询将选择集合中text
对象数组的attribute
字段值为“Alpha”,“Bravo”或“Delta”的所有文档:
dbo.collection.find({
"attributes.text": {
"$in": ["Alpha", "Bravo", "Delta"]
}
});
这将返回两个文件:
/* 0 */
{
"_id" : ObjectId("551187bae3757367bf8bd915"),
"title" : "First Item",
"attributes" : [
{
"id" : "1",
"text" : "Alpha"
},
{
"id" : "2",
"text" : "Bravo"
},
{
"id" : "3",
"text" : "Charlie"
}
]
}
/* 1 */
{
"_id" : ObjectId("551187bae3757367bf8bd916"),
"title" : "Second Item",
"attributes" : [
{
"id" : "1",
"text" : "Alpha"
},
{
"id" : "2",
"text" : "Bravo"
},
{
"id" : "3",
"text" : "Tango"
}
]
}