给定:我得到一个包含批次信息的集合。
期望:我需要返回工作的真值数量。
一些上下文:每个作业都被分成多个批次。在集合中: Thelabellers
包含一个数组,其中 thelabeller
是用户,completed 表示是否有人完成了批次,_id
指的是批次 id,作业包含_id
特定作业的 。
所以我知道我需要放松并按工作分组,但我似乎无法让我的查询返回正确数量的真实值。
集合:
{
"_id": ObjectId("612370c2abbe776854d8c0ec"),
"batch_number": 0,
"job": ObjectId("612370c1abbe777ae8d8c0eb"),
"labellers": [
{
"labeller": ObjectId("61238ed4abbe77763ed8c100"),
"completed": true
},
{
"labeller": ObjectId("61238f2babbe77c838d8c101"),
"completed": true
}
],
"__v": 0
},
{
"_id": ObjectId("612370c2abbe771a75d8c0ed"),
"batch_number": 1,
"job": ObjectId("612370c1abbe777ae8d8c0eb"),
"labellers": [
{
"labeller": ObjectId("61238ed4abbe77763ed8c100"),
"completed": true
},
{
"labeller": ObjectId("61238f2babbe77c838d8c101"),
"completed": false
}
],
"__v": 0
}
期望输出
{
"_id": ObjectId("612370c1abbe777ae8d8c0eb"),
"count": 3
}
我尝试过的:
db.collection.aggregate({
$unwind: "$labellers"
},
{
$group: {
_id: "$job",
count: {
$sum: {
$cond: [
{
"labellers": {
"completed": true
}
},
1,
0
]
}
}
}
})
我尝试过的输出:
{
"_id": ObjectId("612370c1abbe777ae8d8c0eb"),
"count": 4
}
$filter
迭代labellers.completed
布尔数组的循环并过滤真实结果$size
在上述过滤操作中获得总元素返回$group
按job
和总和元素计数db.collection.aggregate([
{
$group: {
_id: "$job",
count: {
$sum: {
$size: {
$filter: {
input: "$labellers.completed",
cond: "$$this"
}
}
}
}
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句