2016-07-27 88 views
1

我有一个使用MongoDB的聚合框架的现有报告,我想添加一个新的字段 - 一个数字字段之一小于给定值的所有文档的计数。MongoDB聚合管道:用字段计数文档小于值?

我的文档有一个长度字段,我已经计算出了平均值,所以除了这个之外,我还希望文档的数量低于某个数字。

我目前聚集的管道很简单:

db.streams.aggregate([ 
 
    { $match: { track_id: "ecb96af4537d4263b83f5675dbcc0388" }}, 
 
    { $group: { _id: "$source", listens: { $sum: 1 } } } 
 
])

我使用$sum$lt尝试过,但数量始终是0。我猜这是因为只有$sum当返回1时计数,但$lt返回true。这是我的尝试:

db.streams.aggregate([{ 
 
    $match: { 
 
    track_id: "ecb96af4537d4263b83f5675dadd0388" 
 
    } 
 
}, { 
 
    $group: { 
 
    _id: "$source", 
 
    listens: { 
 
     $sum: 1 
 
    }, 
 
    skips: { 
 
     $sum: { 
 
     $lt: ["$length", 1000] 
 
     } 
 
    } 
 
    } 
 
}, ])

有谁知道我能做到这一点?谢谢!

回答

0

你可以添加一个嵌套的条件,像这样

... 
skips: { 
    $sum: { 
     $cond: { 
      if: { $lt: ["$length", 1000]}, 
      then: 1, 
      else: 0 
     } 
    } 
} 
... 
+0

完美,太感谢你了! –

相关问题