我觉得没有捷径,但仍想检查。
说我有一个看起来像这样的集合
[{
userName: "Mr. A"
income: 100
expense: null
finalBalance: 200
timestamp: Date.now()
}]
*如果我们有收入金额,费用将为空,反之亦然 最终余额=(收入总和) - (费用总和) Stack: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 :(得分:0)
您无法使用自己的文档值进行更新。因此,要执行此类操作,您必须find
并使用forEach
进行迭代。然后,它会为您提供文档,您可以修改它们并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);
})
尝试并告诉我它是否按预期工作,
希望它有所帮助,
最好的问候