【发布时间】:2017-03-16 23:05:15
【问题描述】:
目前我有:
db.questionanswers.aggregate(
[
sessionStarted: {$first: "$created"}, QuestionsSubmitted: {$last: "$created"}, answer: {$addToSet: "$answer"}}}
],
{
allowDiskUse: true
}
)
它聚合了一个对象列表,其中每个对象的答案组通过 quizID 和 sessionID 相关。
查看Stackoverflow answer 对我的 $addToSet 数组进行排序后,我将查询修改为:
db.questionanswers.aggregate(
[
{$unwind: "$answer"},
{$group : {_id : {sessionId: "$sessionId", quizID: "$quizId" }, answer: {$addToSet: "$answer"} }},
{$unwind : "$answer"},
{$sort : {"answer": 1}},
{$group : { _id : {sessionId: "$sessionId", quizID: "$quizId" }, sessionStarted: {$first: "$created"}, QuestionsSubmitted: {$last: "$created"}, answer: {$push: "$answer"}}}
],
{
allowDiskUse: true
}
)
我进入 Robomongo script executed successfully, but there are no results to show。
我尝试从same answer above 和我的_id : {sessionId: "$sessionId", quizID: "$quizId" } 查询切换_id : null,但它不返回任何结果,除非在两者上使用_id : null 并返回一个巨大组中的所有排序答案,这是有道理的,但这不是我所追求的。任何想法如何使用$group 对每个答案$addToSet 进行排序?
编辑:
聚合自
{
"_id" : ObjectId("xxx"),
"quizId" : "xxx",
"sessionId" : "xxx",
"questionId" : "gender",
"categoryId" : "1",
"question" : "male or female",
"answer" : "male",
"created" : ISODate("2015-12-xxx"),
"__v" : 0
},
{
"_id" : ObjectId("xxx"),
"quizId" : "xxx",
"sessionId" : "xxx",
"questionId" : "gender",
"categoryId" : "1",
"question" : "question 1",
"answer" : "answer a",
"created" : ISODate("2015-12-xxx"),
"__v" : 0
}, // etc //
编辑2:
预期输出:
{
"_id" : {
"quizId" : "xxx",
"sessionId" : "xxx",
},
"sessionStarted" : "2015-12-xxx",
"QuestionsSubmitted" : "2015-12-xxx"
"answer" : {
"0" : "answer a",
"1" : "answer b"
// etc //
}
}
【问题讨论】:
-
能否添加示例文档?
标签: mongodb mongodb-query aggregation-framework