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
  • 不管是 []{} 形式建立數據,都返回 [] 數組形式的結果。
相關文章
相關標籤/搜索