MongoDB更新需要计算两个日期之间的分期付款次数

问题描述 投票:0回答:1

我是 Mogo 的新手,如果有人能指出我的代码有什么问题,那将对我有很大的帮助。我想在两天之间更新几个月内的分期付款。我的代码是使用pastebin。我正在使用 moment.js 来查找几个月内两个日期之间的差异。 我有两个日期字段成熟日期和制裁日期,并希望将两个日期之间的差异存储到名为 noOfInstallment 的字段中。

router.get("/fix", async (req, res) => {
  const data = await Loan.updateMany(
    {},
    {
      $set: {
        noOfInstallment: moment(new Date("$maturityDate")).diff(
          moment(new Date("$sanctionedDate")),
          "months",
          true
        ),
      },
    }
  );
 
  res.send(data);
});
mongodb mongoose
1个回答
0
投票

您无法访问本机 JavaScript 中的字段。一种解决方案是这样的:

db.loan.updateMany(
    {},
    [{
      $set: {
        noOfInstallment: {
          $dateDiff: {
          startDate: "$maturityDate",
          endDate: "$sanctionedDate",
          unit: "month"
          }
        }        
      }
    }]
  );

其他一些注意事项:

moment.js
已弃用,您不应在新项目中使用它。

没有理由

moment(new Date("$maturityDate"))
。我假设
maturityDate
是一个
Date
字段。在已经是
new Date(...)
的值上使用
Date
没有任何意义。

另一种解决方案可能是这个:

db.loan.find({}).forEach( x => {
   db.load.updateOne(
     {_id: x._id}, 
     {$set: {
        noOfInstallment: moment(x.maturityDate).diff(
         moment(x.sanctionedDate),
         "months",
         true
       )
     } }
   );
})

但是

updateMany
应该有更好的表现。

© www.soinside.com 2019 - 2024. All rights reserved.