如何从mongodb的聚合中获取具有特定值的文档?

时间:2019-06-21 08:18:54

标签: mongodb aggregation-framework

假设我有此文件:

文档1:

_id:"1"
name:"Item 1"
quantity:1
min:3
alert:"Yes"

文档2:

_id:"2"
name:"Item 2"
quantity:12
min:5
alert:"No"

如何仅获取警报值为“是”的文档,而排除警报值为“否”的文档?

我从一些汇总中得到的那些文件:

[
  {
    '$group': {
      '_id': '$id', 
      'name': {
        '$first': '$name'
      }, 
      'sum_quantity': {
        '$sum': '$quantity'
      }, 
      'alertMin': {
        '$first': '$alertMin'
      }
    }
  }, {
    '$project': {
      '_id': '$_id', 
      'name': '$name', 
      'quantity': '$sum_quantity', 
      'minimum': '$alertMin', 
      'alert': {
        '$cond': [
          {
            '$lte': [
              '$sum_quantity', '$alertMin'
            ]
          }, 'Yes', 'No'
        ]
      }
    }
  }
]

我希望得到以下结果:

_id:"1"
name:"Item 1"
quantity:1
min:3
alert:"Yes"

2 个答案:

答案 0 :(得分:0)

$match管道的末尾(或您希望匹配的任何地方)添加一个aggregation阶段,它将为您提供所需的结果。

{
    $match : {
        alert : "yes"
    }
}

详细了解$match here

答案 1 :(得分:0)

您可以使用单个管道阶段$ match来实现。您不需要使用任何其他阶段。

请尝试以下操作:

 db.collection.aggregate([
     {
        $match: {
            alert: "Yes"
        }       
     }
 ])