现在,我需要从一个数据库中找到“_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();
})
})
但程序无法关闭(),怎么办,我可以更新数据并退出!
答案 0 :(得分:2)
不要像您那样为每个请求创建连接。最初一次创建与两个数据库的连接。然后,当您从db1启动第一个find
时,创建一个函数来计算更新的项目数,并在每次从db2更新另一个项目时更新该计数器。在该计数器等于第一个列表中的项目之后,然后关闭数据库。
一般来说,你在做一些非常奇怪的事情,尤其是另一个发现,然后在第二次调用中更新。也许您需要update
multi: true
参数来更新多个项目或类似项目。
同样,如果您需要首先将第二个数据库更新为完全状态,请考虑使用mongoexport / mongoimport或mongodump / mongorestore以更有效的方式在数据库之间传输大量数据。