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
。 - 无论是
[]
或{}
形式创建数据,都返回[]
数组形式的结果。