MongoDB的OR查询中的表达式序列

时间:2012-12-28 12:01:20

标签: mongodb mongo-java

阅读MongoDB的OR查询的文档OR的语法是:

Syntax: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 

我不明白的是theses表达式执行的顺序。即

获取匹配表达式-1的文档,如果没有找到,则获取与表达式匹配的文档等等...表达式是否依次执行或者?

是什么意思:“ 当使用带有$或查询的索引时,请记住$或查询的每个子句将并行执行。“

1 个答案:

答案 0 :(得分:1)

查询执行没有特定的顺序,无论是:

db.col.find({ name: 's', c: 1 });

或者:

db.col.find({$or: [{name: 's'}, {c: 1}]})

$or MongoDB中,将根据$or中的条件数有效地进行x查询,返回每个子句的结果,合并重复项,然后返回结果(简单地放) 。由于这种行为,MongoDB实际上可以为$or子句使用多个索引,并且只需要$or子句。

制作复合索引时需要注意这一点。索引确实需要查询的某种结构,有时以最佳速度工作。因此,如果您的复合索引为:

{name: 1, c: 1}

它可能与以下两个条款都不匹配:

 db.col.find({$or: [{name: 's'}, {c: 1}]})

以高效的方式。所以这是你必须要记住$or条款的并行性。如果您希望检查所有子句是否使用索引,您可以在最后使用explain(),这将分解条款及其用法。