首页 > 解决方案 > 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)。

我怎样才能做到这一点?

谢谢

标签: mongodbmongoosemean

解决方案


最后,我更改了更新这些文档的策略(而不是使用 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);
 });

它工作正常!

谢谢。


推荐阅读