首页 > 解决方案 > 如何使用带有 mongodb 和 postman 的节点更新对象数组?

问题描述

我的对象是

{
"_id": "5fc49f48502ed001f437f49b",
"students": [
    {
        "_id": "5fc49f48502ed001f437f49c",
        "name": "John",
        "class: "5",
        "age": "9"
    },
 {
        "_id": "5fc49f48502ed001f437f49d",
        "name": "Richa",
        "class: "7",
        "age": "13"
    }
]
}

我的更新代码是:

router.put("/:id/:studetid", async (req, res) => {
try {
const student= await Student.update(
  { "students._id": req.params.studentid},
  {
    $set: {
      "students.$.name": req.body.name,
      "students.$.class": req.body.class,
      "students.$.age": req.body.age,
    },
  }
);

当我选择 id 并更新任何值表单对象时,值更新成功但其他未更新的值设置为 null..

{
"_id": "5fc49f48502ed001f437f49b",
"students": [
    {
        "_id": "5fc49f48502ed001f437f49c",
        "name": null,
        "class: "6",
        "age": null
    },
}

请问谁能帮我解决这个问题...我想动态更新数据...我正在使用 Postman 发送数据

标签: node.jsmongodbexpressmongoosepostman

解决方案


您在 url 中有一个不正确的变量名。

router.put("/:id/:studetid", async (req, res) => {

应该

router.put("/:id/:studentid", async (req, res) => {

这将起作用

await Student.update(
  { "_id": req.params.studentid},
  {
    $set: {
      "name": req.body.name,
      "class": req.body.class,
      "age": req.body.age,
    },
  }
);

推荐阅读