嵌套数组元素的mongodb$组

嵌套数组元素的mongodb$组,mongodb,aggregate,Mongodb,Aggregate,对于给定的问题,我有以下mongodb集合(问题答案) { "_id" : { "$oid" : "59cda8b730a0131cfafc9101" }, "questionId" : { "$oid" : "59cb7b85c854036fec173267" }, "userQuestionAnswerDetails" : [ { "srno" : 1, "correct_yn" : false}, { "srno" : 2, "correct_yn" : false} ] }

对于给定的问题,我有以下mongodb集合(问题答案)

{ 
"_id" : { "$oid" : "59cda8b730a0131cfafc9101" }, 
"questionId" : { "$oid" : "59cb7b85c854036fec173267" }, 
"userQuestionAnswerDetails" : [ { "srno" : 1, "correct_yn" : false}, { 
 "srno" : 2, "correct_yn" : false} ] 
}

{ 
"_id" : { "$oid" : "59cdb1b930a0131cfafc9102" }, 
"questionId" : { "$oid" : "59cb7b85c854036fec173267" }, 
"userQuestionAnswerDetails" : [ { "srno" : 2, "correct_yn" : false} ] 
}

{ 
"_id" : { "$oid" : "59cdbb1b30a0131cfafc9105" }, 
"questionId" : { "$oid" : "59cb7b85c854036fec173267" }, 
"userQuestionAnswerDetails" : [ { "srno" : 2, "correct_yn" : false} ] 
}

{ 
"_id" : { "$oid" : "59cdd26a30a0131cfafc9107" }, 
"questionId" : { "$oid" : "59cb7b85c854036fec173267" }, 
"userQuestionAnswerDetails" : [ { "srno" : 1, "correct_yn" : false} ] 
}
我需要每个sr编号的cnt,它位于嵌套数组元素内。 预计:

Srno==>cnt

1=>2

2=>3

我正在尝试下面的查询

db.questionanswers.aggregate([
{
    $match:{
        $and: [
            {questionId: ObjectId("59cb7b85c854036fec173267")}
        ]       
    }
},
{
    $group : {_id : {questionId:"$questionId", userQuestionAnswerDetails: "$userQuestionAnswerDetails.srno"}, num_tutorial : {$sum : 1}}
}
])
上述查询给了我类似于以下内容的信息:

{"_id": {"questionId":"ObjectId(59cb7b85c854036fec173267)", "userQuestionAnswerDetails":[1,2]},"num_tutorial":1}
 {"_id":{"questionId":"ObjectId(59cb7b85c854036fec173267)", "userQuestionAnswerDetails":[1]},"num_tutorial":1}
{"_id":{"questionId":"ObjectId(59cb7b85c854036fec173267)", "userQuestionAnswerDetails":[2]},"num_tutorial":2} 
这相当于 Srno==>Cnt

1,2=>1

1==>1

2==>2


如何修改$group以达到预期的结果?提前感谢。

您可以通过添加
$unwind
stage来完成

db.questionanswers.aggregate([
{
    $match:{
        $and: [
            {questionId: ObjectId("59cb7b85c854036fec173267")}
        ]       
    }
}
,{
    $unwind: "$userQuestionAnswerDetails" 
}
,{
    $group : {_id :  {questionId:"$questionId", userQuestionAnswerDetails: "$userQuestionAnswerDetails.srno"}, num_tutorial : {$sum : 1}}
}
])
结果:

{ "_id" : { "questionId" : ObjectId("59cb7b85c854036fec173267"), "userQuestionAnswerDetails" : 2 }, "num_tutorial" : 3 }
{ "_id" : { "questionId" : ObjectId("59cb7b85c854036fec173267"), "userQuestionAnswerDetails" : 1 }, "num_tutorial" : 2 }