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);
});
有什么区别? 我该如何解决?
答案 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();
});
});