首页 > 解决方案 > 想使用猫鼬 updateOne 但它没有更新

问题描述

我想更新类型:报告类型:在reportStatus下挂起,但是当我在邮递员上尝试时,我不断得到

n:1 ,n:modified:1 和 ok:1

 report: [
      {
        category: {
          type: mongoose.Schema.Types.ObjectId,
          ref: "CrimeCategory",
          required: true,
        },

        location: {
          type: mongoose.Schema.Types.ObjectId,
          ref: "Location",
          required: true,
        },
        reportText: {
          type: String,
          required: true,
        },
        reportStatus: {
          type: mongoose.Schema.Types.Mixed,
          default: function () {
            return [
              { type: "reported", date: new Date(), isCompleted: true },
              { type: "pending", isCompleted: false },
              { type: "investigating", isCompleted: false },
              { type: "solved", isCompleted: false },
            ];
          },
        },
      },
    ],

这是我试图更新模型中类型的控制器,我做错了什么?

const crimeReport = require("../../model/crimereport");

exports.updateReport = (req, res) => {
  crimeReport
    .updateOne(
      { _id: req.body.reportId, "report.reportStatus": req.body.type },
      {
        $set: {
          "report.reportStatus.$": [
            {
              type: req.body.type,
              date: new Date(),
              isCompleted: true,
            },
          ],
        },
      }
    )
    .exec((error, report) => {
      if (error) return res.status(400).json({ error });
      if (report) {
        res.status(200).json({ report });
      }
    });
};

邮递员发帖请求:

{
    "reportId": "607b2b25876fa73ec4437440",
    "type":"pending"

}

这是邮递员的帖子结果:

{
    "report": {
        "n": 0,
        "nModified": 0,
        "ok": 1
    }
}

标签: node.jsmongodbmongoose

解决方案


看起来,reportId当 Mongodb 文档的 id 类型为 时,您将 post 请求的正文作为字符串发送ObjectId。在查询 Mongodb 之前,您需要将 reportId 类型转换为 ObjectId。由于您使用的是 Mongoose,因此应该这样做:

mongoose.Types.ObjectId(req.body.reportId)


推荐阅读