updateMany 操作结果中的 Mongoose 增量值 NaN

Posted

技术标签:

【中文标题】updateMany 操作结果中的 Mongoose 增量值 NaN【英文标题】:Mongoose increment value in updateMany operation result NaN 【发布时间】:2020-07-09 23:15:18 【问题描述】:

我有以下猫鼬模式:

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) .

我怎样才能做到这一点?

谢谢

【问题讨论】:

您要更新哪个金额字段?根中的那个还是投资数组中的那个?如果您可以通过示例文档和预期输出来解释,那就太好了。 谢谢,我添加了一个例子。我要增加根文件。 【参考方案1】:

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

而且效果很好!

谢谢。

【讨论】:

以上是关于updateMany 操作结果中的 Mongoose 增量值 NaN的主要内容,如果未能解决你的问题,请参考以下文章

updateMany在mongodb中,其中record = NaN to record = 0

Mongodb:UpdateMany不更新嵌套数组数据

将 2 列中的 json 数据与模式中的数据进行比较,并将最新数据覆盖为 mongoos 中的主要数据

updateMany() 后如何获取所有更新文档的值?

updateMany 找不到参数

返回未更新的搜索值列表(Mongoose、updateMany)