1

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

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

但是程序无法关闭(),怎么办,我可以更新数据并退出!

4

1 回答 1

2

不要像你一样为每个请求创建连接。最初创建一次到两个数据库的连接。然后,当您第一次find从 db1 启动时,创建一个函数来计算更新了多少项目,并在每次从 db2 更新另一个项目时更新该计数器。在该计数器等于第一个列表中的项目之后,然后关闭数据库。

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

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

于 2013-09-18T15:22:57.893 回答