Mongodb返回旧集合

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()调用时,你的集合还没有完成更新。

您可以select在.update()调用的callback函数中调用.find(),也可以根据您的版本使用promises或async / await。

另一个解决scheme是使用findAndModify和新的选项:

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

在调用find之前,您应该等待update完成

 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(); }); }); 

我build议你使用asynchronous

 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); }) }