如何closures两个与节点的mongodb连接

现在,我需要从一个数据库中find“_id”,然后使用这个“_id”从其他数据库中查找数据并更新第一个数据库,但是我无法closures数据库连接。

var Db = require('mongodb').Db, MongoClient = require('mongodb').MongoClient, Server = require('mongodb').Server; var db1 = new Db('test_1', new Server('localhost', 27017)); var db2 = new Db('test_2', new Server('192.68.1.10', 27017)); db1.open(function(error, db1){ var coll_1 = db1.collection("test_1", {strict:true}, function(error, coll_1){ coll_1.find().toArray(function(error, items){ for (var i=0; i<items.length; ++i){ db2.open(function(error, db2){ var coll_2 = db2.collection("test_2", {strict:true}, function(error, coll_2){ coll_2.find().toArray(function(error, values){ coll_1.update(...); }) }) db2.close(); }) } }) db1.close(); }) }) 

但是程序不能closures(),怎么办,我可以更新数据并退出!

不要像你一样为每个请求创build连接。 一开始就build立连接到两个数据库。 然后,当您首先从db1中find时,创build一个函数来计算更新了多less个项目,并且每次从db2更新另一个项目时更新该计数器。 之后,计数器等于来自第一个列表的项目,然后closures数据库。

一般来说,你在这里做的事情非常奇怪,特别是在另一次查找,然后在第二次调用中更新。 也许你只需要update multi: true参数来更新多个项目或类似的。

同样,如果需要将第二个数据库更新为精确状态,请考虑使用mongoexport / mongoimport或mongodump / mongorestore以更有效的方式在数据库之间传输大量数据。