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]
      }
    }
  }
}, ])

有人知道我怎样才能做到这一点吗?非常感谢。

您可以添加这样的嵌套条件

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

相关内容

  • 没有找到相关文章

最新更新