updateOne 不会更新多个字段,也不会在记录中创建新字段

updateOne does not update multiple fields and does not create new fields in a record

我正在为 saving/updating 用户配置文件使用 NodeJs 和 MongoDB atlas。但是,updateOne 方法不更新多个字段,我不知道为什么!它只适用于一个变量而不适用于整个记录!这是我的代码:

app.post("/edit-profile", async (req, res) => {
  if(req.body.password || req.body.phoneNumber){
    res.status(401);
    res.send({"error": "this api is not for changing password or phoneNumber"})
  } else {
    console.log("let's update this user: id="+req.body.id)
    console.log(req.body)
    result = User.updateOne(
      { _id: ObjectId(req.body.id)},
      req.body,
      (error, result) => {
        if (error) {
          console.log(error);
          res.status(400);
          res.send();
        } else {
          if (result.n > 0) {
            console.log("result")
            console.log(result)
            res.header({ sessionToken: "testToken" });
            res.send(req.body);
          } else {
            console.log("there is no user with this id")
            res.status(404);
            res.send({"message":"There is no user with this id!"});
          }
        }
      }
    );
  }
});

例如,每当我拥有它时,它都适用于

{
    "id":"6253024ca9a2fb3a9a8d3675",
    "weight":888
}

但不适用于

{
    "id":"6253024ca9a2fb3a9a8d3675",
    "height":999
}

仅适用于 weight 参数,不会创建新字段 (height)。即使我同时使用了多个字段,也得到了相同的结果。 此外,我还有另一个 API 用于更新膳食项目,它具有相似的结构并且可以正常工作。这是我的代码 API:

app.post("/edit-meals", async (req, res) => {
  const { error } = mealSchema.validate(req.body);
  if (error) {
    res.status(400); // 400 bad request
    res.send(error.details[0].message);
  } else {
    const meal = await Meal.findOne({ title: req.body.title });
    if (meal) {
      Meal.updateOne({ title: req.body.title }, req.body, (err, result) => {
        if (err) {
          res.status(403);
          res.send;
        } else {
          res.send(req.body);
        }
      });
    } else {
      res.status(404);
      res.send();
    }
  }
});

虽然 updateOneedit meals 中有效,但在 edit user 中无效。如果有人能帮助我解决这个问题,我将不胜感激。

    app.post("/edit-meals", async (req, res) => {
  const { error } = mealSchema.validate(req.body);
  if (error) {
    res.status(400); // 400 bad request
    res.send(error.details[0].message);
  } else {
    const meal = await Meal.findOne({ title: req.body.title });
    if (meal) {
      Meal.updateOne({ title: req.body.title }, {{$set:{field: value}}}, (err, result) => {
        if (err) {
          res.status(403);
          res.send;
        } else {
          res.send(req.body);
        }
      });
    } else {
      res.status(404);
      res.send();
    }
  }
});

试试这个{字段:值}

检查您的 User 模型是否定义了所有字段。 Mongoose 将忽略模型中不存在的所有属性。

因此,检查 User 架构并查看是否定义了 height 字段。

使用 updateMany 更新 mongoDb 中的多个文档。

updateMany({data})

要在 mongodb 文档中添加新字段,请使用

updateMany({_id: ObjectId(req.body.id)},{$set:{key:value}})