function updateMongo(url, cached) {
console.log("Update mongo called");
MongoClient.connect('mongodb://127.0.0.1:27017/dbnerds', function(err, db) {
if(err) {
return console.log(err);
}
var cache = db.collection('cache');
cache.insert({url: url, image: null}, {safe: false}, null);
cache.findOne({ url: url }, function(err, result) {
console.log(result);
});
db.close();
});
};
从我的代码中可以看出,我将url插入到mongodb中,但是当我执行findOne
操作时,它似乎无效。控制台没有打印出任何结果。这有什么问题?
答案 0 :(得分:2)
问题是因为没有保证在执行.findOne()调用时对.insert()的调用已经完成。
请尝试使用以下方法:
function updateMongo(url, cached) {
console.log("Update mongo called");
MongoClient.connect('mongodb://127.0.0.1:27017/dbnerds', function(err, db) {
if(err) {
return console.log(err);
}
var cache = db.collection('cache');
cache.insert({url: url, image: null}, {safe: false}, function(err, n) {
// Make the call to findOne until insert has finished
cache.findOne({ url: url }, function(err, result) {
console.log(result);
// close the DB after you are done
db.close();
});
});
});
};
注意我如何将对findOne()的调用移动为插入完成后执行的回调函数。