我想查询指定的数组元素列表,以便返回的文档只能包含我传递的元素,但不需要包含所有元素.
鉴于以下文件:
{
name: "Article 1",
tags: ["Funny", "Rad"]
}
{
name: "Article 2",
tags: ["Cool", "Rad"]
}
{
name: "Article 3",
tags: ["Rad"]
}
Run Code Online (Sandbox Code Playgroud)
以下是一些示例数组及其各自的结果.
["Rad"] 应该归还第3条["Rad", "Cool"] 应归还第2条和第3条["Funny", "Cool"] 应该什么都不返回,因为没有文章只有这些标签中的一个或两者都有我相信我可以解决这个问题,$where但我想避免这种情况,原因很明显.
您可以通过组合多个运算符来实现:
db.test.find({tags: {$not: {$elemMatch: {$nin: ['Rad', 'Cool']}}}})
Run Code Online (Sandbox Code Playgroud)
在$elemMatch与$nin被发现的文档在一个单一的tags元素既不是"拉德"也不是"酷",然后父$not反转匹配返回所有在那里不匹配的任何元素的文档.
但是,这也将返回tags缺少或没有元素的文档.要排除那些你需要添加一个确保tags至少有一个元素的限定符:
db.test.find({
tags: {$not: {$elemMatch: {$nin: ['Rad', 'Cool']}}},
'tags.0': {$exists: true}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |