Mongodb

在 MongoDB 上將特定列從 DB 1 複製到 DB 2

  • February 10, 2022

我有兩個由 NGINX 處理的 Node JS 伺服器實例。第一台伺服器與 MongoDB 第一台伺服器連接,即

mongoose.connect(‘mongodb://127.0.0.1/db_primary’, { useMongoClient: true });

當第二節點 Js 伺服器與 MongoDB Second Serer 連接時,即

mongoose.connect(‘mongodb://127.0.0.1/db_secondary’, { useMongoClient: true });

實際上,我必須對 DB 進行一些繁重的計算,這也是我將 DB 分成兩部分的主要原因。

最初,當我有一台伺服器時,如果後端忙於計算(百萬條目),那麼伺服器完全凍結。所以通過分離伺服器現在沒有冰點。

我的問題是如何複製整個表格表格 DB 1 上的選定列並將其粘貼到 DB 2 中只有選定的列。

Example:Database 1 


{
   _id: ObjectID(54815dfsfsd1f564168ad51a5s),
   a: 123,
   b: 768,
   c: 89.67,
   d: 8976,
   e: 45
 }..........upto 10 million entries

現在我只想將列 c & e 從數據庫 1 複製到數據庫 2。

Expected Result: 
{
       _id: ObjectID(54815dfsfsd1f564168ad51a5s),
       c: 89.67,
       e: 45
}..........upto 10 million entries

而所有這些事情都是由 Nodejs 的 CronJob 完成的。我的意思是不是手動任務。

我是 MongoDB 的新手。任何幫助表示讚賞。

您可以使用查詢進行投影。所以,db.collection.find({},{c:1,e:1})然後將其插入第二個數據庫。

在一個數據庫中,您可以使用項目輸出階段聚合來完成。

有沒有考慮使用副本集二次讀取?

現在我只想將列 c & e 從數據庫 1 複製到數據庫 2。

只有通過&之mongo shell類的方法才有可能。您可以將一個數據庫集合中的某些選定文件複製到另一個數據庫集合。cursor.forEach()``db.getSiblingDB()

我的問題是如何將選定的列複製到 DB1 的整個表格中,然後將其粘貼到 DB2 中,只包含選定的列。

讓我們從頭開始,假設您有兩個數據庫db1& db2

use db1
switched to db db1

我要collection創造db1名字orders

> db.createCollection("order")
{ "ok" : 1 }

我將再次插入一些訂單documentscollection``db1

> db.orders.insertMany([
...  {       "_id" : ObjectId("5a44c1479adf6e5fc5cea525"),
...         "cust_id" : "A123",
...         "amount" : 500,
...         "status" : "A"
... },
... {
...         "_id" : ObjectId("5a44c1479adf6e5fc5cea526"),
...         "cust_id" : "A123",
...         "amount" : 250,
...         "status" : "A"
... },
... {
...         "_id" : ObjectId("5a44c1479adf6e5fc5cea527"),
...         "cust_id" : "B212",
...         "amount" : 200,
...         "status" : "A"
... },
... {
...         "_id" : ObjectId("5a44c1479adf6e5fc5cea528"),
...         "cust_id" : "A123",
...         "amount" : 300,
...         "status" : "D"
... }])
{
       "acknowledged" : true,
       "insertedIds" : [
               ObjectId("5a44c1479adf6e5fc5cea525"),
               ObjectId("5a44c1479adf6e5fc5cea526"),
               ObjectId("5a44c1479adf6e5fc5cea527"),
               ObjectId("5a44c1479adf6e5fc5cea528")
       ]
}

在上面的集合orders中有4個文件,但我只想複製一些欄位記錄(假設這裡我想複製“cust_id”:“B212”各自的記錄到db2)。

我將再次創建第二個數據庫db2

> use db1
switched to db db2

我將再次orders1db2.

> db.createCollection("order1")
{ "ok" : 1 }

**注意:**這裡要執行下面提到的查詢,您必須切換到db1. 因為我們要將收藏記錄從 複製db1db2

> use db1
switched to db db1

然後執行下面提到的查詢

db.orders.find({"cust_id": "B212"}).forEach(function(d){db.getSiblingDB('db2')['orders1'].insert(d);});

確認該記錄欄位的副本是否成功完成。你必須切換到db2. 並找出 中的收藏order1記錄db2

> use db2
switched to db db2

> show collections
orders1

> db.orders1.find()
{ "_id" : ObjectId("5a44c1479adf6e5fc5cea527"), "cust_id" : "B212", "amount" : 200, "status" : "A" }
>

或通過以下命令以正確格式查找記錄

> db.orders1.find().pretty()
{
       "_id" : ObjectId("5a44c1479adf6e5fc5cea527"),
       "cust_id" : "B212",
       "amount" : 200,
       "status" : "A"
}
>

如上所述,我已經說過,我只想將"cust_id" : "B212"記錄從複製db1->ordersdb2->orders1

注意:這裡兩個數據庫需要共享同一個mongod才能工作。

供您進一步參考這里這裡

引用自:https://dba.stackexchange.com/questions/196467