使用$ match和$ unwind来计算

时间:2017-08-29 09:24:43

标签: mongodb mongodb-query

我正在学习MongoDB聚合管道,我试图从alert('asd')if ( $("a").attr('data-followed-by').indexOf('buyer')>0 ) { //do something ... alert('asd') } 的输出中获得匹配计数。我可以看到$unwind$group的结果。但我不确定为什么我没有得到匹配的计数。请帮助获得大于25的百分比字段。

这是一个示例文档:

$unwind

我试过了:

$group

得到了这个输出:

{  
    "_id":ObjectId("599e9dbd8fbad926e712f902"),
    "sample":"1",
    "attribute":[  
        {  
            "functionName":"1",
            "percentage":31.6
        }
    ]
}

我试过了:

db.docs3.aggregate({  
    $unwind:'$attribute'
},
{  
    $group:{  
        _id:{  
            func:"$attribute.functionName",
            percen:"$attribute.percentage"
        }
    }
})

我收到了一个错误。

2 个答案:

答案 0 :(得分:0)

我不确定你是否想要计算

  1. 至少具有percentage > 25
  2. 属性的文档

    或者

    1. 具有percentage > 25
    2. 的属性

      如果您对第1号感兴趣,那么您无需展开attribute数组即可应用您的匹配。以下内容将返回包含至少一个带percentage > 25的属性的文档计数:

      db.getCollection('other').aggregate([
          { $match: { 'attribute.percentage': { $gt: 25 } } },
          { $group: { _id: null, count: { $sum: 1 } } }
      ])
      

      如果您对第2号感兴趣,那么以下内容将返回percentage > 25的属性计数:

      db.getCollection('other').aggregate([
          { $unwind: '$attribute' },
          { $match: { 'attribute.percentage': { $gt: 25 } } },
          { $group: { _id: null, count: { $sum: 1 } } }
      ])
      

      以下文件:

      {
          "_id" : ObjectId("599e9dbd8fbad926e712f902"),
          "sample" : "1",
          "attribute" : [ 
              {
                  "functionName" : "1",
                  "percentage" : 31.6
              }
          ]
      }
      
      {
          "_id" : ObjectId("59a54104e7e9cc2109863beb"),
          "sample" : "1",
          "attribute" : [ 
              {
                  "functionName" : "2",
                  "percentage" : 21.2
              }
          ]
      }
      
      {
          "_id" : ObjectId("59a542c4e7e9cc2109863c45"),
          "sample" : "1",
          "attribute" : [ 
              {
                  "functionName" : "2",
                  "percentage" : 20.2
              }, 
              {
                  "functionName" : "2",
                  "percentage" : 28.2
              }, 
              {
                  "functionName" : "2",
                  "percentage" : 35.2
              }
          ]
      }
      

      第一个命令返回count=2,第二个命令返回count=3

答案 1 :(得分:0)

使用货币符号获取当前值,并使用您在$ group阶段中使用的相同字段名称

db.docs3.aggregate({
    $unwind:'$attribute'
},
{  
    $group:{  
        _id:{  
            func:"$attribute.functionName",
            percen:"$attribute.percentage"
        }
    }
},
{  
    $match:{  
        "$_id.percen":{  
            $gt:25
        }
    }
})