Обновлять одно конкретное поле только при использовании $ во встроенном документе Mongodb

#mongodb #mongoose

#mongodb #mongoose

Вопрос:

Вот мой фрагмент кода.

 router.post(
  "/chapter/officers/edit/:id/:c_id",
  async (req, res) => {
    try {

      const updateChapter = await Council.findOneAndUpdate(
        { "chapters._id": req.params.c_id },
        {
          "chapters.$.officers": req.body,
        }
      );

      if (!updateChapter) return res.status(404).json({ msg: "Not found" });

      res.json("Edit Success");
    } catch (error) {
      res.status(500).json({ msg: error.message });
    }
  }
);
 

Я планирую обновлять только одно конкретное поле за раз, НО когда я попытался отправить этот JSON из Postman

 {
    "grandTriskelion": "sample"
}
 

Другие заполненные значения полей становятся пустой строкой. Вот пример моего res.json

  "_id": "5fc9cbb7ba7e2e2430c9a4d8",
        "name": "Maria Aurora",
        "code": "MA",
        "chapters": [
            {
                "officers": {
                    "grandTriskelion": "sample",
                    "deputyGrandTriskelion": "",
                    "masterWilderOfTheWhip": ""
                },
                "_id": "5fca014e49fa3f2910794bb8",
                "name": "Maria Aurora Community Based"
            }
        ],
 

Я столкнулся с препятствием. Я новичок в стеке MERN.

Комментарии:

1. вам нужно сделать это вручную следующим { "chapters.$.officers.grandTriskelion": req.body.grandTriskelion } образом: создайте одну логику для создания такого рода строки для обновления из ваших параметров тела.

2. это мое первое решение, но вместо этого оно делает другие поля нулевыми.. спасибо за ответ, хотя я глубоко признателен.

3. Это должно сработать, вы можете проверить playground