mongodb - updateMany 操作结果中的 Mongoose 增量值 NaN
问题描述
我有以下猫鼬模式:
var AccountSchema = new Schema({
amount: { type: Number, default: 0 },
createdAt : {type : Date, default : Date.now},
owner: {type : Schema.Types.ObjectId, ref : 'User'},
environment: {type : Schema.Types.ObjectId, ref : 'Environment'},
investments: [{
amount: { type: Number, default: 0 },
roi: { type: Number, default: 0 },
createdAt : {type : Date, default : Date.now},
code: {type : Schema.Types.ObjectId, ref : 'Code'}
}]
});
我想对所有具有特定投资代码的对象执行更新操作。我想以投资完成的 2 倍增加账户金额。
像这样的东西:
db.accounts.updateMany({'investments.code':ObjectId("5e7f2a3e20739d171884528f")},
{ $inc: { "amount": 'investments.$.amount' * 2 } }
);
其结果是记录已更新,但 account 等于 NaN。我试图通过这样做将所有转换为整数,但它不起作用:
{ $convert: { input: "amount", to: "int" } }
我想更新根文档中的金额字段。这是一个例子:
想象一下我有这个帐户:
amount: 300,
createdAt : 12-01-2020,
owner: "5e7f2a3e20739d1718845256",
environment: "5e7f2a3e20739d1718845432",
investments: [{
amount: 40,
roi: 0,
createdAt : 12-01-2020,
code: "3"
},
{
amount: 10,
roi: 0,
createdAt : 13-01-2020,
code: "3"
}]
我想查找代码 3 的所有投资并增加 300 的金额,每次投资的两倍,在本例中为 40*2 和 10*2,结果将是 400(300 + 80 + 20)。
我怎样才能做到这一点?
谢谢
解决方案
最后,我更改了更新这些文档的策略(而不是使用 updateMany 来使用 find 和 forEach 子句),我做到了:
db.accounts.find(
{'investments.code':ObjectId("5e7f2a3e20739d171884528f")}).forEach(function (account) {
account.investments.forEach(function (invest) {
account.amount = account.amount + (invest.amount * 2) ;
});
db.accounts.save(account);
});
它工作正常!
谢谢。
推荐阅读
- c# - 将对象转换为长
- powershell - Dockerfile ENTRYPOINT EXEC form not working with Powershell
- algorithm - 以“dd Mon yyyy”日期格式写入给定数字的程序
- c++ - 创建一个可以像 Vector of Vectors 一样工作的 C++ 模板类
- dynamics-crm-online - BPF 中两个选项集字段的奇怪行为
- oracle - Oracle 存储过程 - 对所有选择结果执行
- reactiveui - 创建一个假命令,我做错了吗?
- django - 将 Django 管理面板对象创建功能与多对多模型一起使用
- codeigniter - 如何在 Codeigniter 4 中扩展控制器?
- perl - 将 Java MD5 转换为 Perl MD5