save()
Model.prototype.save([options][, callback])
Document.prototype.save([options][, callback])
- 要 save 的文档不包含
_id字段,则插入新文档,类似于insert()。 - 要 save 的文档包含
_id字段,则更新文档,相当于update(filter,update,{upsert: true}) - 要 save 的文档包含
_id字段(必须是ObjectId形式),但_id的值在集合中不存在,则插入新文档,_id字段使用文档中的值,不生成新的。
let doc = new AuthorModel({ name: 'dora' }); // model 的实例是 document
let data = await doc.save();
data instanceof AuthorModel // true
data instanceof mongoose.Document // true
callback
- 返回插入数据库的文档,
{}形式。 - 不传入
callback,则返回promise。
create()
Model.create(docs[, options][, callback])
将一个或多个文档保存到数据库的快捷方式。create(docs) 为 docs 中的每个文档执行 MyModel(doc).save()。
docs
- 可以是 [] 数组形式,也可以是 {} 对象形式。
- 没有定义在
schema中的字段,在创建的时候不会被添加进数据库。 schema中有默认值的字段会自动添加进数据库。type为Array的字段默认值是[]空数组。schema中required为true的字段没有的时候,会报错。
let data = await Model.create(doc, doc)
let data = await Model.create([ doc, doc ])
callback
- 不传入
callback,则返回promise。 - 以
{}形式创建一条,返回{}形式带_id的数据。 - 以
[]形式创建一条,返回[]形式带_id的数据。 - 无论哪种形式创建多条,返回
[]数组形式的数据。
insertMany()
Model.insertMany(docs[, options][, callback])
该方法比 create() 方法更快,因为它只向服务器发送一个操作,而不是每个文档发送一个操作。
Mongoose 在向 MongoDB 发送 insertMany 之前会验证每个文档。因此,如果一个文档出现验证错误,则不会保存任何文档,除非将 ordered 选项设置为 false。
doc
{}形式,只插入一条文档。[]形式,可插入多条文档。
options
ordered:默认为true(有序插入),即在遇到第一个错误时就失败并返回error;如果为false(无序插入),则插入所有可以正常插入的文档,然后返回错误信息。rawResult:默认false,返回插入数据库的文档,如果为true,返回 mongoose 原生 result。
callback
- 不传入
callback,则返回promise。 - 无论是
[]或{}形式创建数据,都返回[]数组形式的结果。