将get查询与插入查询相结合

时间:2017-09-26 15:43:34

标签: node.js mongodb

我觉得没有捷径,但仍想检查。

说我有一个看起来像这样的集合

[{
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

,那将会很棒

1 个答案:

答案 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);
})

尝试并告诉我它是否按预期工作,

希望它有所帮助,
最好的问候