【问题标题】:How to change data in a mongoose document with the _id?如何使用 _id 更改 mongoose 文档中的数据?
【发布时间】:2021-10-11 23:40:48
【问题描述】:

我知道这似乎是一个通用问题,但我已经进行了研究,但似乎没有用。我正在制作一个不和谐的机器人,但我对这种事情很陌生。我不断收到此错误UnhandledPromiseRejectionWarning: MongoError: E11000 duplicate key error collection: Data.users index

这是我使用的代码: user.findOneAndUpdate({_id: msg.author, gold: 5});

这个问题的原因是什么以及如何解决?

【问题讨论】:

    标签: javascript node.js mongoose discord.js


    【解决方案1】:

    documentation 非常清楚地描述了参数是什么:

    • 第一个参数:过滤器
    • 第二个参数:更新
    • 第三个参数:设置对象

    在我们的例子中,您传递了一个对象,该对象被解释为过滤器。你需要传递两个对象:

    user.findOneAndUpdate({_id: msg.author}, {gold: 5});
    

    这指定您要将_id 等于msg.author 的第一条记录的gold 更新为5

    在此处查看更多示例:https://mongoosejs.com/docs/tutorials/findoneandupdate.html

    请注意,此答案假定您有一个 _id 字段。如果它有不同的名称,请改用它。

    【讨论】:

    • 我查看了文档,但即使我将您的代码放入我的代码中,我也遇到了同样的错误。这是否与 gold 不是文档中唯一的事实有关?
    • @biggestpenguinfan 错误是抱怨索引重复。我想知道您在 users 表上有哪些主键和唯一键。
    • 对不起,我以前没有做过这种事情,你说的按键是什么意思?
    【解决方案2】:

    mongoose .findOneAndUpdate() 需要 2 个参数:

    • 您要更新的文档的_id
    • 文档的新数据 所以,你的代码应该是这样的:
    user.findOneAndUpdate({ _id: msg.author}, {gold: 5});
    

    【讨论】:

    • 我试过了,但我仍然遇到同样的错误。我是吗?意思是在msg.author之前写_id
    • 是的,这是真的。它需要是一个过滤器对象。在那里,编辑了答案
    猜你喜欢
    • 2015-02-09
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2013-11-14
    • 2017-10-09
    • 2014-01-04
    • 2012-10-13
    相关资源
    最近更新 更多