我试图通过id:
在数据库中获得特定的测验static getQuiz(db, id, cb){ //db is database connection, id is quiz id, cb is just callback
db.find({ _id : "8RA4Rey50eqKFlWK"}, {"quiz" : { $elemMatch : { _id : id}}}, function(err, Doc){
if(cb){
cb(err,Doc);
console.log(Doc); //only return _id : "8RA4Rey50eqKFlWK"
}
})
}
JSON数据库:
{
"_id":"8RA4Rey50eqKFlWK",
"quiz":[
{
"_id":"1b944055-2b15-4838-7e7a-beef4c9a5a62",
"title":"test",
"description":""
},
{
"_id":"7dc53529-206c-6003-1d3c-133264d7ad81",
"title":"aaaa",
"description":""
},
{
"_id":"db3c788f-56b3-f9c8-8a25-affb2981e12f",
"title":"lala",
"description":""
},
{
"_id":"20388c1f-1a00-4f7b-3d25-9db56247a6bf",
"title":"asdasd",
"description":""
}
]
}
以上代码无效,已经过测试:
db.find({ _id : "8RA4Rey50eqKFlWK"}, {"quiz" : { $elemMatch : { title : "test"}}})
但结果仍然只是root id => _id:" 8RA4Rey50eqKFlWK"。
我希望通过id" 1b944055-2b15-4838-7e7a-beef4c9a5a62"进行搜索测验时的结果应该是:
{
"_id":"8RA4Rey50eqKFlWK",
"quiz":[
{
"_id":"1b944055-2b15-4838-7e7a-beef4c9a5a62",
"title":"test",
"description":""
},
]
}
任何解决方案? 我实际上使用的是与MongoDB语法相同的NeDB https://github.com/louischatriot/nedb。 感谢
编辑: 我使用mongodb控制台尝试了我的代码,它的工作非常精彩!也许这只是NeDB的错误?
答案 0 :(得分:0)
db.a.find(
{_id : "8RA4Rey50eqKFlWK"},
{
"quiz" : {
$elemMatch : { "title" : "test"}
}
});
错过拼写标题_title
答案 1 :(得分:0)
你可以试试这个:
<div id="table_wrapper"></div>
答案 2 :(得分:0)
如果我理解正确,您希望查询返回邮件中包含的文档(带有"_id":"8RA4Rey50eqKFlWK"
的文档),并且只显示带有"_id":"1b944055-2b15-4838-7e7a-beef4c9a5a62"
的测验,这是正确的吗?
如果是这样,您需要使用aggregation framework。
以下聚合框架查询将通过_id查询文档,展开&#34;测验&#34;数组并过滤掉数组中的特定子文档:
db.quiz.aggregate([
{ "$match" : { _id: "8RA4Rey50eqKFlWK" } },
{ "$unwind" : "$quiz" },
{ "$match" : { "quiz._id" : "1b944055-2b15-4838-7e7a-beef4c9a5a62" } }
] )
返回:
{ "_id" : "8RA4Rey50eqKFlWK", "quiz" : { "_id" : "1b944055-2b15-4838-7e7a-beef4c9a5a62", "title" : "test", "description" : "" } }
我在另一个answers中提供了汇总框架的详细分类。