按ID查找在Node.js MongoDB中不起作用

时间:2018-08-24 09:16:25

标签: node.js mongodb

db.collection('test').find({"title":"I like cake"}/*,{projection:{_id:true}}*/).toArray(function(err, results){
            if(err) throw err;

            id = "5b7fb08f823d6137e08a7d8a";
        });

        db.collection('test').findOne({_id: new ObjectId(id)}, function(err, results){
            if(err) throw err;  
            console.log(results);
        });

不起作用。 (返回null) 以下示例是可行的。

db.collection('test').find({"title":"I like cake"}/*,{projection:{_id:true}}*/).toArray(function(err, results){
            if(err) throw err;

        });

        db.collection('test').findOne({_id: new ObjectId("5b7fb08f823d6137e08a7d8a")}, function(err, results){
            if(err) throw err;  
            console.log(results);
        });

有什么区别? 我该如何解决?

2 个答案:

答案 0 :(得分:1)

真正的问题是,您正在异步的回调函数中设置ID。因此,当执行findOne查询时,ID尚未设置。

您可能希望将第二个查询移到回调函数本身内:

db.collection("test")
  .find({ title: "I like cake" } /*,{projection:{_id:true}}*/)
  .toArray(function(err, results) {
    if (err) throw err;

    var id = "5b7fb08f823d6137e08a7d8a";

    db.collection("test").findOne({ _id: new ObjectId(id) }, function(err,results) {
      if (err) throw err;
      console.log(results);
    });
  });

答案 1 :(得分:1)

尝试此代码

 db.collection("test").find({}).toArray(function(err, result) {
   db.collection("test").find({
     _id:new ObjectID('5b7fb08f823d6137e08a7d8a')
     }).toArray(function(err, result) {
     if (err) throw err;
     console.log(JSON.stringify(result,undefined,2));
     //db.close();
   });
 });