如何编写嵌套文档的汇总查询?

时间:2020-09-17 07:05:57

标签: mongodb mongodb-query aggregation-framework

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)
    },
    .
    .
]

1 个答案:

答案 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 ]} }
    } }
])

我已在Mongo Playground

处测试了上述查询
相关问题