mongodb - Mongoose/MongoDB 在保存时抛出重复键错误?

标签 mongodb mongoose

根据MongoDB's documentation调用 save 将创建一个新文档,或者如果提供了 _id 则更新现有文档。 Mongoose 的文档是 less detailed并且不涉及是否插入或更新。

我正在尝试使用 Mongoose 的 save 功能更新文档,但我不断收到错误消息:

{"error":{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: staging.participants.$_id _ dup key: { : ObjectId('5515a34ed65073ec234b5c5f') }"}}

Mongoose 的 save 函数是像 MongoDB 的 save 函数一样执行 upsert 还是只是执行插入?

最佳答案

save 是插入还是更新的定义是 isNew 标志,您可以 see here .

当文档实例从 find 查询(或其任何变体)返回时,此标志会自动设置为 false。如果您手动实例化文档,请尝试在保存之前将此标志设置为 false:

var instance = new Model({ '_id': '...', field: '...' });
instance.isNew = false;
instance.save(function(err) { /* ... */ });

还有一个init函数,用于初始化文档和automatically set isNew to false :

var data = { '_id': '...', field: '...' };
var instance = new Model();
instance.init(data, {}, function(err) {
    instance.save(function(err) { /* ... */ })
});

关于mongodb - Mongoose/MongoDB 在保存时抛出重复键错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475118/

相关文章:

javascript - 使用种子字符串在 mongoose 中创建 ObjectId

jquery - 无法使用 Node.js 和 Mongoose 插入 MongoDB

javascript - 使用ng-flow取文件时如何将文件发送到node.js和后端

mongodb - 创建副本集时出错 - MongoDb

即使我对字段建立了索引,MongoDB 查询也会超时

node.js - 如何在 Mongoose 的一个查询中获取数据并进行计数

node.js - TypeError : restify.authorizationParser不是 Node 中的函数

mongodb - Spring boot/mongo 不会使用索引注释创建索引

Yesod/Persistent 的 MongoDB 示例

node.js - MongoDB 中按日期分组