and*_*abs 5 python performance mongodb pymongo mongodb-query
我的意思是,例如有两个条件:如果第一个条件为真,它会避免检查第二个条件吗?
doc = collection.find_one(
{'$or': [
{
'k': kind,
'i': int(pk)
},
{
'children.k': kind,
'children.i': int(pk)
}
]
}, { '_id': False})
Run Code Online (Sandbox Code Playgroud)
我希望它在匹配第一个条件时停止进一步搜索,所以它不会降低搜索孩子的级别。
是$OR闭包中的参数顺序问题,还是 mongodb 巧妙地了解层次结构并影响搜索顺序findOne?
是的,顺序很重要,这是使用数组形式的参数的一个重要原因,当然,参数是有序的。
所以基本上这被称为“短路”评估。因此,只有第一个条件不匹配时,才会测试下一个条件,依此类推。
因此最好用这样的集合来演示:
{ "a": 1 },
{ "a": 2, "b": 1 }
Run Code Online (Sandbox Code Playgroud)
然后是以下查询:
db.collection.find({ "$or": [ { "a": 1 }, { "b": 1 } ] })
Run Code Online (Sandbox Code Playgroud)
当然,这会找到两个文档,因为即使第一个文档没有“b”元素,但无论如何都满足第一个条件。在第二个文档中,由于第一个文档失败,因此使用第二个文档进行匹配。
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |