按 ID 查找在 Nodejs MongoDB 中不起作用 [重复]

Posted

技术标签:

【中文标题】按 ID 查找在 Nodejs MongoDB 中不起作用 [重复]【英文标题】:Finding by Id is not working in Nodejs MongoDB [duplicate] 【发布时间】:2019-01-30 17:48:27 【问题描述】:
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);
        );

它不起作用。 (返回空) 下面的例子是可行的。

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);
        );

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

【问题讨论】:

【参考方案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);
    );
  );

【讨论】:

感谢您的回答。当我使用此代码时,出现此错误“MongoError:拓扑已破坏” 这似乎更像是一个连接问题。阅读:***.com/questions/30909492/… 谢谢!我在回调中调用了 close() 乐于助人! @김동환 嘿感谢您接受答案,如果您也可以投票,那将有所帮助:)【参考方案2】:

试试这个代码

 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();
   );
 );

【讨论】:

感谢您的回答。当我使用此代码时,出现此错误“MongoError:拓扑已破坏” 我更新了代码

以上是关于按 ID 查找在 Nodejs MongoDB 中不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS API:通过“Id”属性将文档查找到集合中,而不是通过 Mongodb 中的“_id”默认值

mongodb查找所有最多

GORM 在 Grails 中使用 MongoDB 按 ID 获取/查找资源

使用 MongoDB/Mongoose 按 ID 查找提交

Express / MongoDb 按 ID 查找所有对象并将它们保存到数组中

Express / MongoDb 按 ID 查找所有对象并将它们保存到数组中