阅读MongoDB的OR查询的文档OR的语法是:
Syntax: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
我不明白的是theses表达式执行的顺序。即
获取匹配表达式-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()
,这将分解条款及其用法。