user Schema
_id: ObjectId
applications: [
{
jobId: ObjectId
status: String (can be accepted / rejected / active)
},
]
这是我的Web应用程序上每个用户的架构。我想要可用于以下用途的mongo查询:
对于一个jobID数组,我需要找出按状态分组的已应用于该作业的所有用户的总和。例如,
For [10,20,34,53] Job IDs, I need to get the following output:
[
{ jobId: 10,
accepted: 20 (20 users have been accepted)
rejected: 17 (17 users have been rejected)
active: 12 (12 users have active applications)
},
{ jobId: 20,
accepted: 20 (20 users have been accepted)
rejected: 17 (17 users have been rejected)
active: 12 (12 users have active applications)
},
.
.
]
答案 0 :(得分:1)
您可以尝试以下查询,我用过$unwind,然后用$group来按jobId
分组
db.user.aggregate([
{ "$unwind": "$applications" },
{ "$match": { "applications.jobId": { "$in": [10, 20, 34, 53] } }},
{ "$group": {
"_id":"$applications.jobId",
"jobId": { "$first": "$applications.jobId"},
"accepted": { "$sum": {"$cond": [{"$eq": ["$applications.status","accepted"] }, 1, 0 ]} },
"rejected": {"$sum": {"$cond": [{"$eq": ["$applications.status","rejected"] }, 1, 0 ]} },
"active": {"$sum": {"$cond": [{"$eq": ["$applications.status", "active"] }, 1, 0 ]} }
} }
])
处测试了上述查询