我想过滤所有键(以列表格式存在)作为字段存在的文档。我可以用字段作为一个接一个的密钥查询多次
{ field: { $exists: <boolean> } }
但这似乎并不特别有效。我也很关心速度。它是否基本上是一个线性搜索,即使有一些键被索引。
此外,是否存在一种简单的语法,用于查询是否存在任何键作为字段?
编辑:
举个例子,让我们说keys = ['key1','key2','key3']
。
现在,我想过滤所有包含&#39; key1&#39;,&#39; key2&#39;和&#39; key3&#39;作为领域。
答案 0 :(得分:2)
这里你真正的意思是$all
运算符:
db.collection.find({ "keys": { "$all": ["key1","key2","key3"] } });
找到包含数组中“全部”元素的文档,例如“keys”。
您指向的$exists
运算符实际上是为了查看给定的键值是否实际存在于文档中:
{ "key": "something" }
所以上下文中的$exists
将是:
db.collection.find({ "key": { "$exists": true } })
意味着该字段实际存在。
因此,如果您想匹配存在的文档的“键”,如下所示:
{
"key1": "",
"key2": "",
"key3": ""
}
然后你会在你的查询中列出所有这些:
db.collection.find({
"key1": { "$exists": true },
"key2": { "$exists": true },
"key3": { "$exists": true }
})
这就是事情的运作方式。
答案 1 :(得分:0)
如果您想让所有密钥都存在,您可以尝试:
db.collection.find(
"$or": [
{"key1": {"$exists": true}}, {"key2": {"exists": true}}
]
)
或者您也可以使用“$或”来过滤是否存在任何密钥。
{{1}}