阅读 MongoDB 的 OR 查询的文档,OR 的语法是:
Syntax: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
我不明白的是这些表达式的执行顺序。IE
如果没有找到匹配表达式 1 的文档 获取与表达式 2 等匹配的文档 ... 表达式是一个接一个地执行还是?
以及它是什么意思:“当使用带有 $or 查询的索引时,请记住 $or 查询的每个子句都将并行执行。”
阅读 MongoDB 的 OR 查询的文档,OR 的语法是:
Syntax: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
我不明白的是这些表达式的执行顺序。IE
如果没有找到匹配表达式 1 的文档 获取与表达式 2 等匹配的文档 ... 表达式是一个接一个地执行还是?
以及它是什么意思:“当使用带有 $or 查询的索引时,请记住 $or 查询的每个子句都将并行执行。”
查询执行没有特定的顺序,无论它是:
db.col.find({ name: 's', c: 1 });
或者:
db.col.find({$or: [{name: 's'}, {c: 1}]})
在$or
MongoDB 中,将根据您在 中的条件数量有效地进行 x 查询$or
,为每个子句返回一个结果,合并重复项,然后返回结果(简单地说)。由于这种行为,MongoDB 实际上可以为一个$or
子句使用多个索引,而此时只能使用一个$or
子句。
在制作复合索引时要注意这一点。索引有时需要特定的查询结构才能以最佳速度工作。因此,如果您有一个复合索引:
{name: 1, c: 1}
它可能不匹配以下两个子句:
db.col.find({$or: [{name: 's'}, {c: 1}]})
以高效的方式。因此,您必须在此处考虑$or
子句的并行性。如果您想检查所有子句是否使用索引,您可以explain()
在末尾使用 an ,这将为您分解子句及其用法。