在 MongoDB 上將特定列從 DB 1 複製到 DB 2
我有兩個由 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 }
我將再次插入一些訂單
documents
。collection``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
我將再次
orders1
在db2
.> db.createCollection("order1") { "ok" : 1 }
**注意:**這裡要執行下面提到的查詢,您必須切換到
db1
. 因為我們要將收藏記錄從 複製db1
到db2
。> 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->orders
到db2->orders1
。注意:這裡兩個數據庫需要共享同一個mongod才能工作。