2016-07-27 87 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

完美,太感謝你了! –

相關問題