簡體   English   中英

NodeJS 中的多個 MongoDB 數據庫連接

[英]Multiple MongoDB database Connections in NodeJS

我總是用一個連接字符串創建一個連接。 我的問題是,如果在 NodeJs get API 中給出了一組連接字符串,如何建立多個連接(MongoDB 實例)?

假設多個連接字符串將具有相同類型的數據庫。 例如,我的數據庫名稱是“University”,這個數據庫在所有不同的位置都可用。 我想寫一個通用的 API,它將為我提供來自不同連接的一系列大學,該怎么做?

例子

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

現在我想連接所有三個連接字符串並從中獲取所有記錄並發送它們以響應一個常見的 API,我怎樣才能有效地做到這一點? 同樣在檢索每個查詢之后,我需要關閉相應的數據庫實例。

您的意見將幫助我更好地理解這種結構

使用名為exec的示例 function 對每個數據庫執行查詢,並等待 Promise.allSettled 返回的Promise.allSettled數組。 一旦解決,解析(例如,減少,可能排序)以進行適當的合並。

// 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傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM