0

我试图通过 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":""
      },
    ]
}

有什么解决办法吗?我实际上使用的是 NeDB https://github.com/louischatriot/nedb,它的语法与 MongoDB 相同。谢谢

编辑:我使用 mongodb 控制台尝试了我的代码,它工作得很好!也许那只是 NeDB 错误?

4

3 回答 3

0

你可以试试这个:

db.collection.find( { 
        _id: "8RA4Rey50eqKFlWK",
        "quiz" : { 
           $elemMatch : { "title" : "test"}
              }} );
于 2017-04-07T18:20:36.483 回答
0

如果我理解正确,您希望查询返回包含在您的消息中的文档(带有 的文档"_id":"8RA4Rey50eqKFlWK")并且只显示带有 的测验"_id":"1b944055-2b15-4838-7e7a-beef4c9a5a62",这是否正确?

如果是这样,您将需要使用聚合框架

以下聚合框架查询将通过_id查询文档,展开“quiz”数组并过滤掉数组中的特定子文档:

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" : "" } }

我在另一个答案中提供了聚合框架的详细分解。

于 2017-04-07T21:42:54.133 回答
0
        db.a.find(     
          {_id : "8RA4Rey50eqKFlWK"},
          { 
             "quiz" : { 
                  $elemMatch : { "title" : "test"}
                     }
          });

错过拼写标题到 _title

于 2017-04-07T18:05:08.130 回答