node.js - 将获取查询与插入查询相结合

标签 node.js mongodb

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

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

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

*如果我们有收入金额,则支出将为空,反之亦然 最终余额=(收入总和)-(费用总和) 堆栈:mongodB+node.js

基本上需要知道在集合中插入新对象的最短和最佳方法,这涉及每次计算新的“finalBalance”。

目前我所做的是每次我必须插入一个新交易,如顶部所示。 我使用“时间戳”和“用户名”获取该用户的最后一笔交易,然后从中添加或减去收入或支出金额,然后 创建新对象并插入。

例如:

用户最后一笔交易:

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

需要为用户插入新交易并提供详细信息

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

第1步:(从数据库获取)从数据库中获取用户的最后一笔交易,以获得最后的“finalBalance”。

第 2 步:从“finalBalance”中减去“费用”金额,得到新的“finalBalance”,即 (200 - 10 = 190)

第3步:(插入数据库)进行插入

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

有没有一种方法可以让我们计算新的“finalBalance”并通过一次数据库调用插入新对象?

如果解决方案是使用 mongo.js 就太好了

最佳答案

您无法使用自己的文档值来更新它。因此,要执行此类操作,您必须找到它并使用forEach迭代它。然后,它将为您提供您的文档,您将能够修改它们并保存它们:

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

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

希望有帮助,
最好的问候

关于node.js - 将获取查询与插入查询相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46430746/

相关文章:

javascript - 如何缩小 gulp-webpack 文件?

node.js - NestJS - 文件上传到微服务

非 ISO 日期格式的 MongoDb TTL 索引

node.js - 蒙戈错误: Unsupported OP_QUERY command: insert

javascript - 排序在 mongodb 中不起作用

javascript - 在 JavaScript/nodejs 中,访问变量与访问变量的属性之间是否存在速度差异?

node.js - 如何在 Promise 中使用异步函数?

node.js - 用于在 Node.js 中发送邮件的 Gmail API

javascript - Mongoose 查询不会被修改

php - MongoDB PHP : How do I get ObjectId with a JSON feed?(它是空白的)