如何关闭与节点的两个mongodb连接

时间:2013-09-18 08:12:10

标签: node.js mongodb

现在,我需要从一个数据库中找到“_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();
  })
})

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

1 个答案:

答案 0 :(得分:2)

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

一般来说,你在做一些非常奇怪的事情,尤其是另一个发现,然后在第二次调用中更新。也许您需要update multi: true参数来更新多个项目或类似项目。

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