Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何为嵌套文档编写聚合查询?_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb 如何为嵌套文档编写聚合查询?

Mongodb 如何为嵌套文档编写聚合查询?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,这是我的web应用程序上每个用户的模式。我希望mongo查询可用于以下内容: 对于一个jobid数组,我需要找出应用于该作业的所有用户的总和,这些用户按状态分组。那么比如说, user Schema _id: ObjectId applications: [ { jobId: ObjectId status: String (can be accepted / rejected / active) }, ] 您可以尝试以下查询,我使用了,然后按

这是我的web应用程序上每个用户的模式。我希望mongo查询可用于以下内容:

对于一个jobid数组,我需要找出应用于该作业的所有用户的总和,这些用户按状态分组。那么比如说,

user Schema

_id: ObjectId
applications: [
    {
        jobId: ObjectId
        status: String (can be accepted / rejected / active)
    },
]

您可以尝试以下查询,我使用了,然后按
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)
    },
    .
    .
]
我已经在这里测试了上述查询

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