【问题标题】:Mongoose wont insert an array when updating a modelMongoose 在更新模型时不会插入数组
【发布时间】:2020-12-17 22:02:56
【问题描述】:

我有一个模型,它由像 Trello 这样的板和列表组成,我的模型是

const listSchema = mongoose.Schema({
    header: String,
    listItems: [String]
})

const BoardSchema = mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    lists: [listSchema]
})

在用户创建一个板并重定向到它后,他应该创建一个列表,然后将项目添加到该列表中

module.exports.AddList = async(req, res) => {

    const { id } = req.body;
    Board.findById(id).then((board) => {
            const list = {
                header: "List1",
                listItem: ['task', 'task2']
            }
            board.lists.push(list);
            board.save();
        }).catch((e) => {
            console.log(e);
        })
}

当我这样做时,它确实将一个模型插入到数据库中,但是lists[]只有_id和header属性,没有listItems,这是什么原因?以及为什么列表[]中的每个对象在我无法使用它们时都有自己的_id,例如

 List.findById('5f49b4db98bcad61a84410e6').then((list) => {
             console.log(list)
         })

只返回空值;

【问题讨论】:

  • 嘿,你在 Board.findById(id) 查询之前没有使用 await 关键字,你不能更新文档,比如推送到承诺的结果。
  • 您没有在猫鼬查询之前使用await 关键字。 Mongoose 查询返回承诺。

标签: node.js mongodb mongoose


【解决方案1】:

您不能像这样更新文档。请参阅以下文档。 现在使用 async-await 的新语法

module.exports.AddList = async (req, res) => {
  try {
    const { id } = req.body;
    const board = await Board.findByIdAndUpdate(id, { $set: { header: "List1", listItem: ['task', 'task2'] } }, { new: true });
    //Do what to you want do with data.
  } catch (error) {
    console.log(error);
  }
}

你错过了 save() 之前的 await 关键字

module.exports.AddList = async(req, res) => {

    const { id } = req.body;
    Board.findById(id).then((board) => {
            const list = {
                header: "List1",
                listItem: ['task', 'task2']
            }
            board.lists.push(list);
            await board.save();
        }).catch((e) => {
            console.log(e);
        })
}

https://mongoosejs.com/docs/tutorials/findoneandupdate.html

【讨论】:

  • 这似乎也没有添加数组
  • 你能解释一下你到底想做什么吗?您的问题不清楚
猜你喜欢
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2018-06-16
  • 2017-01-19
  • 2015-10-01
  • 2017-02-07
相关资源
最近更新 更多