[英]Count the occurrence of an element in multiple arrays?
Consider I have a Tasks collection like this (each task can be assigned to many users and has a status):考虑我有一个这样的任务集合(每个任务可以分配给许多用户并具有状态):
[
{
_id: 1,
title: "Task 1",
assignedTo: ["userId1", "userId2", "userId3"]
status: "To do"
},
{
_id: 2,
title: "Task 2",
assignedTo: ["userId1", "userId2"],
status: "In progress"
},{
_id: 3,
title: "Task 3",
assignedTo: ["userId2", "userId3"],
status: "In progress"
}
]
I want to use MongoDB aggregate to analyze how many tasks a user is assigned based on status.我想使用 MongoDB 聚合来分析根据状态为用户分配了多少任务。 For example, the expected output should be something like this:例如,预期的 output 应该是这样的:
[
{
_id: "userId1",
tasks: [
{
status: "To do",
numTasks: 1
},
{
status: "In progress",
numTasks: 1
},
]
},
{
_id: "userId2",
tasks: [
{
status: "To do",
numTasks: 1
},
{
status: "In progress",
numTasks: 2
},
]
},
{
_id: "userId",
tasks: [
{
status: "To do",
numTasks: 1
},
{
status: "In progress",
numTasks: 1
},
]
}
]
$unwind
- Deconstruct assignedTo
array to multiple documents. $unwind
- assignedTo
数组解构到多个文档。$group
- Group by assignedTo
and status
for calculating numTasks
. $group
- 按numTasks
和status
分组,用于计算assignedTo
。$group
- Group by assignedTo
and add tasks
field with the result of (2). $group
- 按tasks
assignedTo
。db.collection.aggregate([
{
"$unwind": "$assignedTo"
},
{
"$group": {
"_id": {
assignedTo: "$assignedTo",
status: "$status"
},
"numTasks": {
"$sum": 1
}
}
},
{
"$group": {
"_id": "$_id.assignedTo",
"tasks": {
"$push": {
status: "$_id.status",
"numTasks": "$numTasks"
}
}
}
}
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.