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

MongoDB的查询或序列中的表达式,mongodb,mongo-java,Mongodb,Mongo Java,阅读MongoDB的文档或查询,或的语法为: Syntax: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 语法:{$or:[{},{},{},{}]} 我不明白的是这些表达式的执行顺序。i、 e 获取与表达式-1匹配的文档如果未找到任何内容,则获取与表达式-2匹配的文档等。。。表达式一个接一个地执行是真的吗 这意味着什么?” 在对$or查询使用索引时

阅读MongoDB的文档或查询,或的语法为:

Syntax: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 
语法:{$or:[{},{},{},{}]}
我不明白的是这些表达式的执行顺序。i、 e

获取与表达式-1匹配的文档如果未找到任何内容,则获取与表达式-2匹配的文档等。。。表达式一个接一个地执行是真的吗

这意味着什么?”
在对$or查询使用索引时,请记住$or查询的每个子句都将并行执行。”

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

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

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

这在制作复合索引时需要注意。索引有时确实需要查询具有某种结构才能以最佳速度工作。如果您的复合索引为:

{name: 1, c: 1}
它可能不符合以下两个条款:

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

以表演的方式。因此,在这里,您必须牢记,
$或
子句的并行性。如果您希望检查所有子句是否使用索引,您可以在末尾使用一个
explain()
,它将分解子句及其用法。

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

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

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

这在制作复合索引时需要注意。索引有时确实需要查询具有某种结构才能以最佳速度工作。如果您的复合索引为:

{name: 1, c: 1}
它可能不符合以下两个条款:

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

以表演的方式。因此,在这里,您必须牢记,
$或
子句的并行性。如果您希望检查所有子句是否使用索引,您可以在末尾使用一个
explain()
,它将为您分解子句及其用法。

有没有办法告诉MongoDB:“返回第一个子句找到的第一个文档,只有在第一个条件中没有找到文档时,才使用第二个”依此类推?@Adio不幸的是,MongoDB不会并行运行所有子句,然后返回结果,它没有案例说明,所以我必须在生产中这样做?@Adio你是什么意思?让所有子句并行运行应该是可以的,并且您不应该(只要您仔细选择查询和索引等)看到太多使用
$或
的性能问题有没有办法告诉MongoDB:返回第一个子句找到的第一个文档,只有在第一个条件没有找到文档时,才使用第二个条件“依此类推?@Adio不幸的是,MongoDB不会并行运行所有子句,然后返回结果,它没有案例说明,所以我必须在生产中这样做?@Adio你是什么意思?让所有子句并行运行应该是可以的,并且您不应该(只要您仔细选择查询和索引等)看到使用
$或