mongoose 系列之三 create 建立文档

save()

Model.prototype.save([options][, callback])html

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])api

将一个或多个文档保存到数据库的快捷方式。create(docs)docs 中的每一个文档执行 MyModel(doc).save()数组

docs

  • 能够是 [] 数组形式,也能够是 {} 对象形式。
  • 没有定义在 schema 中的字段,在建立的时候不会被添加进数据库。
  • schema 中有默认值的字段会自动添加进数据库。
  • typeArray 的字段默认值是 [] 空数组。
  • schemarequiredtrue 的字段没有的时候,会报错。
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])promise

该方法比 create() 方法更快,由于它只向服务器发送一个操做,而不是每一个文档发送一个操做。服务器

Mongoose 在向 MongoDB 发送 insertMany 以前会验证每一个文档。所以,若是一个文档出现验证错误,则不会保存任何文档,除非将 ordered 选项设置为 falsemongoose

doc

  • {} 形式,只插入一条文档。
  • [] 形式,可插入多条文档。

options

  • ordered:默认为 true (有序插入),即在遇到第一个错误时就失败并返回 error;若是为 false (无序插入),则插入全部能够正常插入的文档,而后返回错误信息。
  • rawResult:默认 false,返回插入数据库的文档,若是为 true,返回 mongoose 原生 result。

callback

  • 不传入 callback,则返回 promise
  • 不管是 []{} 形式建立数据,都返回 [] 数组形式的结果。
相关文章
相关标签/搜索