【问题标题】:findByIdAndUpdate do not update documentfindByIdAndUpdate 不更新文档
【发布时间】:2021-01-13 13:50:42
【问题描述】:

我正在尝试使用 findByIdAndUpdate 将字段更新到文档中。我尝试更新的字段在条形模型中定义。而且我还可以保证req.body.bookId 有一个有效的ID。

我的请求如下所示,

app.patch("/foo", async (req, res) => {
    try {
        await validateId(req.body.bookId);

        let doc = await Bar.findByIdAndUpdate(
            req.body.bookId,
            { DateT: Date.now() },
            { new: true }
        );

        res.send(doc);
    } catch (err) {
        console.log(err);
    }
});

条形图,

const mongoose = require("mongoose");

const barSchema = mongoose.Schema({
    bookId: {
        type: String,
        unique: true,
    },
    DateT: {
        type: Date,
        default: null,
    },
});

module.exports = mongoose.model("Bar", barSchema);

【问题讨论】:

  • 我发现了您的问题,您为 bookId 分配了一个 ID,但您没有将其分配给 _id 键,因此您不能使用 findByIdAndUpdatene,因为为 _id 生成了不同的 ID
  • @MohammadYaserAhmadi,是的,你是对的。使用updateOne 并将bookId 传递给查询就可以了。

标签: mongodb express mongoose


【解决方案1】:

使用updateOne,当你使用async时不要使用.then()使用try/catch

测试一下:


app.patch("/foo", async (req, res) => {
  try {
    let doc = await Bar.updateOne(
      { bookId : req.body.bookId },
      { DateT: Date.now() },
      { new: true }
    );
    res.send(doc);
  } catch (error) {
    console.log(error);
  }
});

【讨论】:

  • 不幸的是,它没有用。关于使用$set,这不是原因,你可以称之为'useless' right there for this use case。另外,我也尝试过 try catch,但不起作用。
  • @MohammadYasarAhmadi,我也更新了我的代码 sn-p,但这不起作用。
  • 如果 req.body.id 是 mongoose.Types.objectId,可能是你的 Schema 有问题
  • req.body.id 是一个字符串,所以它是在模式中定义的。
  • 不应该是{bookId = req.body.bookId},应该是{bookId : req.body.bookId}。我已经对这个@MohammadYaserAhmadi 进行了修改
【解决方案2】:
app.patch("/foo", async (req, res) => {
    await Bar.findByIdAndUpdate(
        req.body.bookId,
        { DateT: Date.now()},
        (err, docs) => {
            if (err) {
                console.log(err);
            } else {
                res.send(docs);
            }
        }
    );
});

【讨论】:

  • 只是改变变量名不会让它工作伙伴,不是在这种情况下。如果自定义变量覆盖此处未发生的任何保留变量,它将起作用。
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2018-08-18
  • 2017-02-10
  • 2019-06-14
  • 2019-09-10
  • 2020-08-12
相关资源
最近更新 更多