python - mongodb findOne 和 $or 参数的顺序重要还是层次结构? [表现]

标签 python mongodb performance mongodb-query pymongo

我的意思是例如有两个条件:如果第一个条件为真,它会避免检查第二个吗?

doc = collection.find_one(
    {'$or': [
              {
               'k': kind,
               'i': int(pk)
              },
              {
               'children.k': kind, 
               'children.i': int(pk)
              }

            ]
    }, { '_id': False})

我希望它在匹配第一个条件时停止进一步搜索,这样它就不会在较低级别搜索 child 。

$OR 闭包中的参数顺序问题还是 mongodb 清楚地知道层次结构并影响 findOne 的搜索顺序?

最佳答案

I would like that it stops further searching when matchin first condition, so it not goes lower level to search around children.

你要问自己的问题是:MongoDB 怎么知道 $or 的两边是如何被一方满足的? MongoDB 如何知道不满足第一个条件的文档不满足第二个条件?

如果我说我有一组文档,一半是 {a:1,b:1} 一半是 {b:2} 如何如果你不知道下半部分是什么样子,你能知道上半部分满足 a:1 OR b:1 吗?

简单的回答是,事实并非如此。它必须搜索两个条件(通过并行查询,然后返回并合并重复项)因为这样的顺序并不重要,除非它是 $and 并且在这种情况下顺序的重要性在索引中不是查询,因为查询将四处移动以优化最快的结果路径。

所以实际上 MongoDB 的工作方式是它针对每个条件发出一个“查询”。这实际上解释了行为:http://docs.mongodb.org/manual/reference/operator/query/or/#behaviors

When using indexes with $or queries, each clause of an $or can use its own index.

关于python - mongodb findOne 和 $or 参数的顺序重要还是层次结构? [表现],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25544097/

相关文章:

python - 检查模板 Django 中变量中字符串的某些部分

javascript - 在 MongoDB 和 Mongoose 中执行全文搜索的最佳方法

javascript - AngularJS - Restheart API (MongoDB) - 解析 JSON 结果

python - 为什么 numpy 本身就是 'slow'?

Javascript - 滚动事件的效率,仅运行代码一次

python - 正斜杠的正则表达式含义/

python - Pandas:通过对来自不同 df 的列求和来创建新 df 的 Pythonic 方式

python - Series 的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

java - 使用 Java 向 MongoDB 中的数组添加值

php - 连接3张表是1张表性能MYSQL