NodeJS中的多个MongoDB数据库连接



我总是用一个连接字符串创建一个连接。我的问题是,如何使多个连接(MongoDB实例),如果在NodeJs得到API的连接字符串数组给出?

假设多个连接字符串将具有相同类型的数据库。例如,我的数据库名称是"大学",这个数据库在所有不同的位置都可用。我想写一个通用的API,它将为我提供来自不同连接的大学的数组,怎么做呢?

例子
connectionString1 = mongodb://localhost:27017
connectionString2 = mongodb://localhost:27018
connectionString3 = mongodb://localhost:27019

现在我想连接所有三个连接字符串并从中获取所有记录并发送它们为了响应一个通用的API,我如何以有效的方式做到这一点?此外,在检索每个查询之后,我需要关闭相应的数据库实例。

你的输入将帮助我更好地理解这个结构

使用示例函数exec对每个数据库执行查询,并等待Promise.allSettled返回的promise数组。一旦确定,解析(例如,reduce,可能是sort)以进行适当的合并。

// each db with client.db(name)
const dbArr = [db1, db2, ...];
// execute query for given collection across each db, return promise array
function exec(coll, query) {
let p = [];
for (let db of dbArr) {
p.push(db.collection(coll).find(query))
}
return p;
}
// main
async function fetchUniversitiesBy(filter) {
try {
// make mongo filter doc
const query = filter

const results = await Promise.allSettled(exec('university', query));
/* 
reduce, or execute any other manipulation here to merge results. 
Can check `status` of settled objects here 
*/
return results.reduce((acc, c) => [...acc, ...c], []);
} catch(e) {
console.log(e)
} finally {
// client `close()` here
}
}

在"API"方面,在您定义api/universities/get(或无论如何定义)路由的地方调用fetchUniversitiesBy。假设您的请求参数可以作为filter传递。

最新更新