【问题标题】:How to update a subdocument (REF)?如何更新子文档(REF)?
【发布时间】:2022-02-15 05:14:02
【问题描述】:

我正在使用下面的方法来更新“Producers”文档中的所有字段。

exports.updateProducers = async (req, res) => {
    let obj = new Producers(req.body);
    await Producers.findOneAndUpdate({ "user.nome": "Naomi"}, obj, {upsert: true, new: true}, function (err) {
        (err ? res.status(400).send(err) : res.status(200).json(obj));
    });
}

此方法有效并且通常会更新所有“生产者”字段,但是,我参考了“用户”文档,如下所示:

user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User',
    required: true
  },

在“用户”中,我有“名称”字段。我如何也可以对用户添加编辑?

我目前收到这条消息:

MongoError:对路径“_id”执行更新会修改不可变字段“_id”

如果有人可以帮助我分析我做错了什么,我不胜感激?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    朋友,当你像obj一样创建产品实例时,你只创建了一个临时实例,该实例并没有保存到数据库中,所以使用的更新方法,只需要一个过滤器和更新,和一些可选参数,所以如果你想从 name 或其他属性更新,请改用它:

    const resultOfUpdate = await Producers.findOneAndUpdate(
        {
            "users.name": "Naomi"
        },
        obj,
        {
            upsert: true,
            new: true
        }
    )
    

    使用 REST API 方法可以很好地了解如何更新文档,有关更多详细信息,请查看以下来源:

    https://www.geeksforgeeks.org/mongoose-findbyidandupdate-function/ https://www.tutorialspoint.com/nodejs/nodejs_restful_api.htm

    【讨论】:

    • { "ok": 0, "code": 66, "codeName": "ImmutableField", "name": "MongoError" }
    • 我在上面得到了这个信息。 MongoError:对路径“_id”执行更新将修改不可变字段“_id”
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2017-10-13
    • 2016-11-04
    • 2019-02-26
    • 2016-06-17
    • 2015-05-14
    • 2015-04-12
    相关资源
    最近更新 更多