MongoDB 聚合管道:计算某个字段小于值的文档?
MongoDB aggregation pipeline: counting documents with a field is less than value?
我有一个使用 MongoDB 聚合框架的现有报告,我想向其中添加一个新字段 - 对其中一个数字字段小于给定值的所有文档进行计数值。
我的文档有一个长度字段,我已经在计算它的平均值,所以除此之外,我还想知道低于某个数字的文档数量。
我目前的聚合管道非常简单:
db.streams.aggregate([
{ $match: { track_id: "ecb96af4537d4263b83f5675dbcc0388" }},
{ $group: { _id: "$source", listens: { $sum: 1 } } }
])
我试过使用 $sum
和 $lt
,但计数始终为 0。我猜这是因为 $sum
仅在 1
为返回,但 $lt
returns 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
}
}
}
...
我有一个使用 MongoDB 聚合框架的现有报告,我想向其中添加一个新字段 - 对其中一个数字字段小于给定值的所有文档进行计数值。
我的文档有一个长度字段,我已经在计算它的平均值,所以除此之外,我还想知道低于某个数字的文档数量。
我目前的聚合管道非常简单:
db.streams.aggregate([
{ $match: { track_id: "ecb96af4537d4263b83f5675dbcc0388" }},
{ $group: { _id: "$source", listens: { $sum: 1 } } }
])
我试过使用 $sum
和 $lt
,但计数始终为 0。我猜这是因为 $sum
仅在 1
为返回,但 $lt
returns 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
}
}
}
...