Mongodb findone方法不起作用

时间:2013-12-08 01:04:33

标签: node.js mongodb

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操作时,它似乎无效。控制台没有打印出任何结果。这有什么问题?

1 个答案:

答案 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()的调用移动为插入完成后执行的回调函数。