MongoDB聚合框架匹配OR

17 浏览
0 Comments

MongoDB聚合框架匹配OR

在$match操作中是否可能进行OR运算?\n我的意思是类似这样的操作:\ndb.articles.aggregate(\n { $or: [ $match : { author : \"dave\" }, $match : { author : \"john\" }] }\n);\n

0
0 Comments

MongoDB聚合框架的match操作符是用来筛选文档的,它可以根据指定的条件来过滤数据。而在这个问题中,使用了match操作符和$or操作符来实现多个条件的匹配。

问题的出现原因是需要对集合中的文档进行筛选,只保留满足以下条件的文档:

1. community字段的值不等于指定的id。

2. community字段不存在。

为了实现这样的筛选,可以使用$or操作符来表示或的关系。在$or操作符的参数中,可以指定多个条件,只要有一个条件满足即可。

解决方法是在$match操作符的参数中使用$or操作符,并指定两个条件:

1. 使用$expr操作符来比较community字段的值与指定的id是否不相等。

2. 直接判断community字段是否不存在。

下面是具体的代码实现:

$match : {
    $or: [
        {
            $expr: {
                $ne: ["$community", ObjectId(id)]
            }
        },
        {
            community: {
                $exists: false
            }
        }
    ]
}

以上就是关于MongoDB聚合框架中使用match操作符和$or操作符的问题的原因和解决方法。通过使用$or操作符,可以方便地实现多个条件的匹配,从而对文档进行筛选。

0
0 Comments

在这个特殊情况下,使用$or操作符对相同字段进行操作,使用$in操作符会是更好的选择,因为它提高了可读性:

$match: { 
  'author': { 
    $in: ['dave','john'] 
  } 
}

根据MongoDB文档,在这种情况下推荐使用$in

$or与$in比较

当使用$or与<表达式>进行相同字段的值的等式检查时,使用$in操作符代替$or操作符。

https://docs.mongodb.com/manual/reference/operator/query/or/#or-versus-in

根据Mongo文档,这是进行等式比较的"最有效"的方法,就像你的例子一样。详见docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22

$in是正确的选择。

我认为$or不是一个聚合操作符。

希望你没有因为这个回答给我点了个踩。请大家在点踩之前先评论一下原因,这对每个人都有帮助。这里是参考Boolean Aggregation Operators -> $or

你的回答是不正确的,正如你所看到的,我已经评论解释了回答的错误之处。

你没有正确理解上下文/读取问题。你指向的查询正好是问题本身,而且我也知道它是错误的,$or不是一个聚合操作符。我推荐的是在那之下的内容。请仔细再次阅读一下 😉 你应该在问题上发表评论,说明它是错误的 😀

说实话,我也认为你的{$or...}块是一个回答,这让我非常困惑。并不清楚你是在引用问题,还是在提供两种解决问题的方法。在"I would recommend..."之前的所有内容都可以删除,这只会增加回答的清晰度。--- 除此之外,我也认为使用$in操作符是正确的方法,所以我也支持你的回答。-- (否则你将使用$or作为一个阶段,而它不是)

0
0 Comments

MongoDB的聚合框架提供了一种强大的工具,用于在数据库中进行数据聚合和分析。在聚合操作中,$match操作符用于过滤文档,只返回满足特定条件的文档。

然而,有时我们希望在$match操作中使用逻辑或(OR)条件,以便在满足任一条件的情况下返回文档。这就引发了一个问题:如何在$match操作中使用逻辑或条件?

解决方法是使用$or操作符。在$or操作符中,我们可以指定多个条件,只要其中一个条件满足,就返回文档。下面是一个使用$or操作符的示例:

$match: { $or: [{ author: 'dave' }, { author: 'john' }] }

在这个示例中,我们使用$match操作符来找到作者是"dave"或"john"的文档。如果文档的作者字段满足其中一个条件,那么这个文档就会被返回。

需要注意的是,$or操作符是在$match操作符中使用的,而不是在查询操作中使用的。这是因为$match操作符只接受与find()函数相同的参数。

总结起来,使用$match操作符和逻辑或条件可以让我们在MongoDB的聚合框架中过滤文档。通过在$or操作符中指定多个条件,只要其中一个条件满足,就返回文档。这为我们提供了更灵活的数据分析和聚合功能。

0