Javascript Mongodb返回旧集合

Javascript Mongodb返回旧集合,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在更新表集合并尝试获取它们,但我在不更新的情况下获取旧集合。但是在下一个请求中,它已更改。您应该等待更新完成,然后再调用查找 router.post('/orders/finish', function(req, res, next) { var order_id = req.body.order_id; var user_id = req.body.user_id; var table_id = ''; var result = []; mongo.connect(url, fu

我正在更新表集合并尝试获取它们,但我在不更新的情况下获取旧集合。但是在下一个请求中,它已更改。

您应该等待
更新完成,然后再调用
查找

router.post('/orders/finish', function(req, res, next) {
var order_id = req.body.order_id;
var user_id  = req.body.user_id;
var table_id = '';

var result = [];



mongo.connect(url, function(err, db) {
    assert.equal(null, err);

    db.collection('tables').update({id: table_id, status: true}, {$set: {status: false}}, function(err, result) {
        assert.equal(null, err);

    });
    var cursorTables = db.collection('tables').find({status: false});
    cursorTables.forEach(function(doc, err) {
        assert.equal(null, err);
        result.push(doc);
    }, function() {
        db.close();
        res.send(JSON.stringify(result));
    });

});
调用.find()时,集合尚未完成更新

您可以选择在.update()调用的回调中调用.find(),也可以根据您的版本使用Promissions或async/await

另一个解决方案是使用新的选项:

可选。如果为true,则返回修改后的文档,而不是原始文档。findAndModify()方法忽略删除操作的新选项。默认值为false

我建议你使用


您需要发布完整的代码,然后,会发生什么?可能是@johnyhk的复制我使用了setTimeout,但仍然无法工作
setTimeout
并不能解决此问题。关于
setTimeout
的链接问题是重复的,因为它与正确处理异步函数的问题相同。
db.collection('tables').update({id: table_id, status: true}, {$set: {status: false}}, function(err, result) {
        assert.equal(null, err);
        var cursorTables = db.collection('tables').find({status: false});
        cursorTables.forEach(function(doc, err) {
            assert.equal(null, err);
            resultTables.push(doc);
        }, function() {
            db.close();
        });
    });
router.post('/', function(req, res) {
    var order_id = req.body.order_id;
    var user_id  = req.body.user_id;
    var table_id = '';

    mongo.connect(url, table_id, function(err, db) {
        myFuntion(db, table_id, function(result) {
            res.send(JSON.stringify(result)); // it should be what you need
        })
    })

});

function myFuntion(db, table_id, callback) {
    var result = [];
    async.waterfall([
        function(callback) {

            db.collection('tables').update({id: table_id, status: true}, {$set: {status: false}}, function(err, result) {
                assert.equal(null, err);
                callback(null);
            });

        }, function(callback) {
            db.collection('tables').find({status: false}, function(err, docs) {
                docs.forEach(function(doc) {
                    result.push(doc);
                })
                callback(null, result);
            });
        }
    ], function(err, result) {
        callback(result);
    })

}