【发布时间】:2015-10-01 21:58:55
【问题描述】:
我遇到了一个 Mongo DB 查询的小问题。
我有一个名为“Answers”的集合,其结构如下
{
"_id": ObjectId("560acfcb904a29446a6d2617"),
"path_id": ObjectId("560acae1904a29446a6d2610"),
"step_id": "kids",
"user_id": ObjectId("559ae27684ff12e88d194eb7"),
"answers": [
{
"id": "kids_q",
"question": "Do you have kids?",
"answer": "No"
}
]
}
如您所见,answers 是一个数组,它可以有一个或多个对象,但始终是一个数组。
首先,我想得到一个 step_id 中的答案总数
我通过以下使用聚合的查询得到它
Answer.aggregate( {
$match: {
'path_id': {
$eq: path_id
},
'step_id': {
$eq: step_id
},
''
}
}, {
$group: {
_id: {
step_id: '$step_id'
},
count: {
$sum: 1
}
}
}, function( err, results ) {
if ( err ) {
deferred.reject( err );
}
deferred.resolve( results );
} );
效果很好。
其次,我想知道有多少答案与问题和答案相匹配。
我们以Do you have kids?问题为例,我想知道Yes有多少个答案,在命令行中运行查询我得到正确的结果:
db.answers.find( {
path_id: ObjectId( '560acae1904a29446a6d2610' ),
'answers.0.question': 'Do you have kids?',
'answers.0.answer': 'Yes'
} )
我想使用 mongoose 将该查询转换为聚合查询,并避免对数组 answers.0.question 进行硬编码,因为该答案可以存储在随机索引中,可能存储在索引 1 中,也可能存储在索引 7 中。
感谢任何帮助。
谢谢
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query aggregation-framework