1

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

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

我不明白的是这些表达式的执行顺序。IE

如果没有找到匹配表达式 1 的文档 获取与表达式 2 等匹配的文档 ... 表达式是一个接一个地执行还是?

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

4

1 回答 1

1

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

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

或者:

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

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

在制作复合索引时要注意这一点。索引有时需要特定的查询结构才能以最佳速度工作。因此,如果您有一个复合索引:

{name: 1, c: 1}

它可能不匹配以下两个子句:

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

以高效的方式。因此,您必须在此处考虑$or子句的并行性。如果您想检查所有子句是否使用索引,您可以explain()在末尾使用 an ,这将为您分解子句及其用法。

于 2012-12-28T12:07:04.520 回答