【问题标题】:How can I push an object to a nested array of objects in mongoDB and expressjs如何将对象推送到 mongoDB 和 expressjs 中的嵌套对象数组
【发布时间】:2020-09-18 20:44:45
【问题描述】:

我有以下 Board 对象:

{
    "boardMembers": [
        "5f636a5c0d6fa84be48cc19d"
    ],
    "boardLists": [
        {
            "cards": [],
            "_id": "5f6387e077beba2e3c15d15a",
            "title": "list one",
            "__v": 0
        }
    ],
    "_id": "5f63877177beba2e3c15d159",
    "boardName": "board1",
    "boardPassword": "123456",
    "boardCreator": "5f636a5c0d6fa84be48cc19d",
    "g_createdAt": "2020-09-17T15:57:37.616Z",
    "__v": 2
}

您可以看到有一个“boardLists”数组,我想发出一个发布请求,将一张卡片发布到该数组内具有特定 ID 的列表中。

我的代码:

router.post("/add-task/:id", auth, boardAuth, async (req, res) => {
  const listId = req.params.id;

  try {
    const board = await Board.findOne({ _id: req.board._id });
    if (!board) return res.status(404).send("no such board");

    const list = await List.findOne({ _id: listId });
    if (!list) return res.status(404).send("List not found");

    const task = new Task({
      text: req.body.text,
    });

    Board.updateOne(
      { _id: req.board._id, "boardLists._id": listId },
      { $push: { "boardLists.$.cards": task } }
    );

    await board.save();
    res.send(board);
  } catch (err) {
    console.log(err);
  }
});

现在的问题是,当我在邮递员中发出请求调用时,它会在我想要的特定列表中推送,但它没有将推送保存在父板对象中:当对该对象执行获取请求时,我得到一个空的卡片数组。 像这样:

{
    "boardMembers": [
        "5f636a5c0d6fa84be48cc19d"
    ],
    "boardLists": [
        {
            "cards": [],
            "_id": "5f6387e077beba2e3c15d15a",
            "title": "list one",
            "__v": 0
        }
    ],
    "_id": "5f63877177beba2e3c15d159",
    "boardName": "board1",
    "boardPassword": "123456",
    "boardCreator": "5f636a5c0d6fa84be48cc19d",
    "g_createdAt": "2020-09-17T15:57:37.616Z",
    "__v": 2
}

为什么它不保存板对象中的推送?

【问题讨论】:

  • 为什么所有cmets都被删除了?

标签: node.js mongodb express mongoose


【解决方案1】:

猫鼬很奇怪。您需要将该字段标记为已修改,否则将不会保存更改。试试这个:

board.markModified("boardLists");
await board.save();

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 2020-07-08
    • 2021-11-06
    • 1970-01-01
    • 2023-01-12
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多