如何使用 _id 更改 mongoose 文档中的数据?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 是的,这是真的。它需要是一个过滤器对象。在那里,编辑了答案

以上是关于如何使用 _id 更改 mongoose 文档中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose - 检索到的文档中没有“_id”属性

如何将子文档中的字段更改为 Mongoose 中的父字段

如何在不使用 _id 字段但使用多个属性的情况下在 mongoose 中查找子文档

如何在 Mongoose 中定义除 _id 之外的其他主键?

如何在 JavaScript 中使用 Mongoose 动态更新文档?

Mongoose:尝试使用 (id) 检索文档 - 获取 NULL