如何使用 _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 文档中的数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 _id 字段但使用多个属性的情况下在 mongoose 中查找子文档
如何在 Mongoose 中定义除 _id 之外的其他主键?