MongoDB 聚合框架匹配 OR

132

在$match中是否可以使用OR?

我的意思是这样的:

db.articles.aggregate(
    { $or: [ $match : { author : "dave" }, $match : { author : "john" }] }
);
3个回答

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

因此,由于$match运算符只是获取您通常放入find()函数中的内容。


108
在这种特定情况下,当您使用$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


1
根据Mongo文档,这是执行像您的示例一样的相等比较的“最有效”方法。请参见http://docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22 - Mark Gibaud
3
$in 是最好的选择。 - Chenna V
1
我认为$or不是一个聚合操作符。 - Paul Shapiro
@PaulShapiro: 我希望你没有因为这个而投反对票。请所有人在投反对票之前考虑先评论原因,这有助于大家。这里是参考资料布尔聚合运算符 -> $or - Amol M Kulkarni
@AmolMKulkarni 说实话,我也认为你的 {$or...} 块是一个答案,这让我感到很困惑。它并不清楚你在引用问题,但它给人的感觉好像你提供了两种解决问题的方法。在“我建议...”之前的所有内容都可以删除,这只会增加答案的清晰度。 --- 除此之外,我也认为使用 $in 运算符是正确的方法,所以我也投票支持你的答案。(否则你将使用 $or 作为阶段,而它不是)。 - Daniel F
显示剩余2条评论

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

}


根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接