MongoDb逻辑查询运算符和大括号
嵌套时使用大括号的规则是什么?运行聚合查询时在mongoDB中使用逻辑运算符的规则是什么?某些查询有效,而其他查询无效,如下所示 情景1(工程):MongoDb逻辑查询运算符和大括号,mongodb,aggregation-framework,Mongodb,Aggregation Framework,嵌套时使用大括号的规则是什么?运行聚合查询时在mongoDB中使用逻辑运算符的规则是什么?某些查询有效,而其他查询无效,如下所示 情景1(工程): 情景3(工程) 场景3(将给出与场景2不同的结果) 情景4(工程): 如果我要执行以下操作,场景4将给出不同的结果: 在任何地方,文件中均未说明此类详细信息 所以我认识到一件事,就是带$and或$or的嵌套大括号可以视为单独的步骤/阶段,具体取决于我们如何使用它们。这个概念被称为合并,它将在聚合管道优化()中详细讨论。 让我用一个例子来解释更
情景3(工程)
场景3(将给出与场景2不同的结果)
情景4(工程): 如果我要执行以下操作,场景4将给出不同的结果:
在任何地方,文件中均未说明此类详细信息 所以我认识到一件事,就是带$and或$or的嵌套大括号可以视为单独的步骤/阶段,具体取决于我们如何使用它们。这个概念被称为合并,它将在聚合管道优化()中详细讨论。 让我用一个例子来解释更多 假设x=[1,2,3,5,8,13,21,34,55];我们希望在我们的集合中过滤这些信息。案例一。 我对“先大于后小于”进行了比较,这是有原因的
$project:
{
$and: [ { $gt: [ "$qty", 25 ] },{ $lt: [ "$qty", 5 ] }]
}
我们应该得到8,13,21的结果
接下来,让我们试试这个
$项目:
$and:
[
{
$and:[{ $gt: [ "$qty", 25 ] }],
$and:[{ $lt: [ "$qty", 5 ] }],
}
]
我们应该得到一个8,13,21的结果,原因是它已经消失了,一次就完成了
最后一个例子
$and:
[
{
$and:[{ $gt: [ "$qty", 25 ] }],
},
{
$and:[{ $lt: [ "$qty", 5 ] }],
}
]
结果应该是[]或为空
我们将得到一个空列表的原因是,我们将分两个阶段运行上述查询。第一阶段将过滤我们的值x中大于25的数字,并返回一个新列表。然后,下一阶段将继续过滤第一阶段的结果中小于5的数字,这些数字将为空,因为结果集只包含大于25的数字
这里的教训是,如果查询的嵌套部分在$and中,$或请注意,每个大括号被视为一个单独的阶段,以下阶段根据前一阶段的结果进行操作。因此,我意识到,带有$和/或$的嵌套大括号可以视为单独的步骤/阶段,具体取决于我们如何使用它们。这个概念被称为合并,它将在聚合管道优化()中详细讨论。 让我用一个例子来解释更多 假设x=[1,2,3,5,8,13,21,34,55];我们希望在我们的集合中过滤这些信息。案例一。 我对“先大于后小于”进行了比较,这是有原因的
$project:
{
$and: [ { $gt: [ "$qty", 25 ] },{ $lt: [ "$qty", 5 ] }]
}
我们应该得到8,13,21的结果
接下来,让我们试试这个
$项目:
$and:
[
{
$and:[{ $gt: [ "$qty", 25 ] }],
$and:[{ $lt: [ "$qty", 5 ] }],
}
]
我们应该得到一个8,13,21的结果,原因是它已经消失了,一次就完成了
最后一个例子
$and:
[
{
$and:[{ $gt: [ "$qty", 25 ] }],
},
{
$and:[{ $lt: [ "$qty", 5 ] }],
}
]
结果应该是[]或为空
我们将得到一个空列表的原因是,我们将分两个阶段运行上述查询。第一阶段将过滤我们的值x中大于25的数字,并返回一个新列表。然后,下一阶段将继续过滤第一阶段的结果中小于5的数字,这些数字将为空,因为结果集只包含大于25的数字
因此,这里的教训是,如果您将查询的一部分嵌套在$and$中,或者请注意,每个大括号都被视为一个单独的阶段,下面的阶段将根据前一阶段的结果进行操作
$project:
{
$and: [ { $gt: [ "$qty", 25 ] },{ $lt: [ "$qty", 5 ] }]
}
$and:
[
{
$and:[{ $gt: [ "$qty", 25 ] }],
$and:[{ $lt: [ "$qty", 5 ] }],
}
]
$and:
[
{
$and:[{ $gt: [ "$qty", 25 ] }],
},
{
$and:[{ $lt: [ "$qty", 5 ] }],
}
]