根据MongoDB's documentation,对save的调用将创建一个新文档,如果提供了_id,则更新现有文档.Mongoose的文档是less detailed,没有讨论它是否会插入或更新.

我试图使用Mongoose的save函数来更新文档,但我不断收到错误:

{"error":{"name":"MongoError","code":11000,"err":"insertDocument::

Mongoose的save函数是像MongoDB的save函数那样执行upsert,还是只是执行insert?

推荐答案

定义save是插入还是更新的是isNew标志,正如see here所示.

当从find查询(或其任何变体)返回文档实例时,该标志将自动设置为false.如果要手动实例化文档,请在保存之前try 将此标志设置为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相关问答推荐

从两个相连的文件中获取电话和邮箱的渠道是什么?

如何使用mongodb进行离线开发?

如何在查找 foreignField 中使用通配符?

MongoDb $filter,然后获取非重复计数

如何在 go mongo-driver 中为 options.FindOne() 设置限制

Mongo:投影不影响布尔值

创建索引需要很长时间

.save() 不是函数 Mongoose

如何使用 -number 后缀对字符串进行 MongoDB 查询排序?

在 GridFS、express、mongoDB、node.js 中存储来自 POST 请求的数据流

有没有办法将python对象直接存储在mongoDB中而不序列化它们

无法连接到远程 mongodb 服务器

MongoDB Compass 过滤器(查询)

从 id 删除 PyMongo 中的文档

C# MongoDB 驱动程序 - 如何使用 UpdateDefinitionBuilder?

通过 Java 执行 Mongo like Query (JSON)

在 mongoose 中使用 UUID 进行 ObjectID 引用

Mongodb同时在多个字段上聚合(计数)

MongoDb - 利用多 CPU 服务器进行写入繁重的应用程序

查找聚合性能差