2017-09-26 26 views
1

我覺得這沒有捷徑,但仍然想檢查。結合獲取查詢和插入查詢

說,我有一個集合,看起來像這樣

[{ 
userName: "Mr. A" 
income: 100 
expense: null 
finalBalance: 200 
timestamp: Date.now() 
}] 

*如果我們有收入金額,費用將是空的,反之亦然 最終餘額=(收入之和) - (費用之和) 堆棧:mongodB + node.js

基本上需要知道在集合中插入新對象的最短和最佳方式,這涉及到每次計算新的「finalBalance」。

curretly我所做的是每次我必須插入一個新的事務,如上圖所示。 我使用「timestamp」和「userName」獲取該用戶的最後一次轉換,然後添加或減去收入或費用金額,並創建新對象並插入。

例如:

的用戶最後一次交易:

{ 
userName: "Mr. A" 
income: 100 
expense: null 
finalBalance: 200 
timestamp: Date.now() 
} 

需要用戶插入新的交易,詳情

({userName: "Mr. A", expense: 10}) 

第1步:(從DB獲得)獲取最後從DB獲得最後的「finalBalance」用戶交易。

步驟2:將來自 「finalBalance」。減去了 「費用」 量以獲得新的 「finalBalance」,這將是(200 - 10 = 190)

步驟3:(在DB插入)使刀片

{ 
userName: "Mr. A" 
income: null 
expense: 10 
finalBalance: 190 
timestamp: Date.now() 
} 

有沒有一種方法可以計算新的「finalBalance」並用一個數據庫調用插入新的對象?

如果解決方案是mongo.js

回答

0

不能使用自己的文檔的值更新,那將是巨大的。因此,要執行這種操作,您必須使用find並使用forEach進行迭代。然後,它會給你你的文件(S),你就可以對它們進行修改和save他們:

var yourObj = {userName: "Mr. A", expense: 10}; 
db.collection.find({yourObj.userName}).forEach(doc => { 
    doc.finalBalance = doc.finalBalance - yourObj.expense; 
    doc.timestamp: Date.now(); 

    db.events.save(doc); 
}) 

嘗試,並告訴我,如果它能正常工作,

希望它能幫助,
最好的問候

+0

嗨感謝您的建議,我會嘗試一下。但這不適用於我的情況。由於我需要一個單一的查詢完整的東西,沒有提到的問題,但我會做插入許多使用該查詢,因爲我有一個數組或插入這樣的交易。但是,如果這種查詢不能寫出來,我可以使用你的建議。 –