我需要编写一个MongoDB聚合管道来计算具有包含两种类型的值的数组的对象:
这是我的数据集:
[
{ values: [ 1, 2, 3] },
{ values: [12, 1, 3] },
{ values: [1, 21, 3] },
{ values: [1, 2, 29] },
{ values: [22, 9, 2] }
]
这将是预期的输出
{
has10s: 4,
has20s: 3
}
Mongo的$in (aggregation)似乎是这项工作的工具,除非我不能让它工作。
这是我的(非工作)管道:
db.mytable.aggregate([
{
$project: {
"has10s" : {
"$in": [ { "$gte" : [10, "$$CURRENT"]}, "$values"]}
},
"has20s" : {
"$in": [ { "$gte" : [20, "$$CURRENT"]}, "$values"]}
}
},
{ $group: { ... sum ... } }
])
$in的输出似乎总是正确的。有人能帮上忙吗?
发布于 2019-06-21 03:25:23
您可以尝试如下所示:
db.collection.aggregate([{
$project: {
_id: 0,
has10: {
$size: {
$filter: {
input: "$values",
as: "item",
cond: { $gte: [ "$$item", 10 ] }
}
}
},
has20: {
$size: {
$filter: {
input: "$values",
as: "item",
cond: { $gte: [ "$$item", 20 ] }
}
}
}
}
},
{
$group: {
_id: 1,
has10: { $sum: "$has10" },
has20: { $sum: "$has20" }
}
}
])
使用$project
和$filter
获取实际元素,然后通过$size
获取数组长度。
https://stackoverflow.com/questions/56690676
复制相似问题