按 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”默认值
GORM 在 Grails 中使用 MongoDB 按 ID 获取/查找资源