首页 文章

MongoDB聚合管道:计算带有字段的文件小于值?

提问于
浏览
1

我有一个使用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]
      }
    }
  }
}, ])

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

1 回答

  • 0

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

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

相关问题