2种更新方法来交换日期NodeJS,Mongoose + mongoDB

时间:2019-03-13 17:07:26

标签: javascript node.js mongodb function mongoose

我正在尝试创建一个包含2个日期的路由,并将这些日期在数据库中彼此交换。

update方法在forEach外部有效,但在内部无效,我如何才能在forEach内部有效?

// @route   PATCH api/swap
// @desc    replace date
// @access  Public

router.put("/swap", (req, res) => {
  const firstDate = req.body.firstDate;
  const secondDate = req.body.secondDate;

  // console.log(firstDate, secondDate);

  // Card.updateOne({ date: firstDate }, { $set: { date: secondDate } });
  Card.find()
    .then(cards => {
      cards.forEach(card => {
        if (card.date === firstDate) {
          return card.updateOne(
            { date: firstDate },
            { $set: { date: secondDate } }
          );
        } else if (card.date === secondDate) {
          return card.updateOne(
            { date: secondDate },
            { $set: { date: firstDate } }
          );
        } else {
          return card;
        }
      });
    })
    .then(() => console.log("working"));
});

2 个答案:

答案 0 :(得分:1)

对于要实现的目标,您需要使用QueryCursor,它可以使您一个接一个地修改文档。

您可以这样做,

<a class="btn btn-primary ABC-Fill" style="float:right;" role="button">Insert ABC</a>

答案 1 :(得分:0)

您需要确保forEach中的匿名函数支持promise,可以通过async关键字来实现。

尝试一下:

      cards.forEach(async (card) => {
          return card.updateOne(
...

此外,findAndModify()可能是一项更好的工作工具,因此您可以避免在每个请求上遍历Card对象的整个集合,并将其卸载到query参数中数据库调用。