Mongo聚合匹配多个值

时间:2020-03-09 20:48:10

标签: mongodb mongodb-query aggregation-framework

我有以下文件

  {
       name: 'John',
       Address :'street 1 '
   },
   {
       name: 'Jane',
       Address :'street 2 '
   },
   {
       name: 'Smith',
       Address :'street 3 '
   }

我想在mongo聚合管道中搜索具有不同价位的多个文档。

这意味着名称=('John','Smith')。我期望结果是

{
   name: 'John',
   Address :'street 1 '
},
{
   name: 'Smith',
   Address :'street 3 '
}

我的代码是

db.articles.aggregate($match: { $or: [{ name: 'John' }, { name: 'Smith' }]);

这是一个空值。是否可以这样获取文档?

3 个答案:

答案 0 :(得分:4)

[{
$match: {
    name: {
        $in: [ 'John' ,'Smith' ]

    }
}]

此查询返回 name 字段匹配给定数组的任何 $in 项的所有匹配项:John 或 Smith。

答案 1 :(得分:1)

您需要使用运算符$in

$ in运算符选择域值所在的文档 等于指定数组中的任何值。

[{
    $match: {
        name: {
            $in: ['John', 'Smith']
        }
    }
}]

参考:MongoDB Docs: $in

答案 2 :(得分:0)

查询中缺少方括号对。

db.articles.aggregate([{$ match:{$ or:[{name:'John'},{name:'Smith'}]}}])))

但是您可以将查询减少到下面

db.articles.aggregate([{$ match:{name:{$ in:['John','Smith']}}}]));