国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

mongoose再認識(二)

Blackjun / 674人閱讀

摘要:文章接續再認識一,下文中使用代碼可參考這篇文章中的。這也是它存在的意義。注在使用操作數據庫中的數據時一定要注意,要操作的時或返回的一整條數據,如果是實例化了一個,則會造成數據庫中的數據丟失。系列文章再認識一再認識二再認識三

在開發中,除了使用mongoose進行一些基本的操作外,就是一些技巧的使用。

文章接續mongoose再認識(一),下文中使用代碼可參考這篇文章中的。

虛擬字段

虛擬字段,從字面意思就可以明白,它不是真正的字段,不存在與數據庫中,但是當使用model實例查詢時,卻可以靈活的運用這個字段。

注:這個特性是mongoose自己的,與mongo無關。

...
// 添加了一個虛擬的fullname字段
// get fullname
UserSchema
  .virtual("fullname")
  .get(() => this.firstname + " " + this.lastname)
// set fullname
UserSchema
  .virtual("fullname")
  .set((name) => let arr = name.split(" "), this.firstname = arr[0], this.lastname = arr[1] )

// read
UserModel
  .find({})
  .exec()
  .then(doc => {
    console.log(doc[0])
  })

查詢的結果如下:

{ _id: 5c1dc7248aaf9c2c80fee915,
  firstname: "東坡",
  lastname: "蘇",
  __v: 0 }

那么,如何獲取到結果fullname呢?

可以通過doc[0].fullname來獲取。

如何對數據進行保存呢?代碼如下:

// 模擬AJAX請求保存數據
let person2 = new UserModel()
person2.fullname = "白 李"

person2
  .save()
  .then(doc => console.log(doc))
  .catch(err => console.log(err))

返回結果:

{ _id: 5c1dd7ef535df51980e9fd98,
  firstname: "白",
  lastname: "李",
  __v: 0 }

這樣,在開發的過程中,就不用擔心因為字段不匹配而需要修改數據庫的問題。這也是它存在的意義。

有興趣的同學可參考node club中對user.js中用戶的分級,不需要在建立一個字段用來保存用戶的等級,可以用virtual Type通過socre計算來得出來。

在Schema定義一些Model實例常用的方法

熟悉mongoose的原理的都知道,Model的構造函數是在Schema實例的基礎上創造出來的。所以,對于頻繁操作的Model實例方法,可以在Schema的實例上進行定義(具體的可參考JavaScript的prototype)。

在一個Schema中經常會帶有updateAtcreateAt這樣的字段,通常的情況下,會給它們一個默認的值。userSchema代碼修改如下:

let UserSchema = new mongoose.Schema({
  firstname: String,
  lastname: String,
  createAt: {
    type: Date,
    default: Date.now
  },
  updateAt: {
    type: Date,
    default: Date.now
  }
})

在開發中,開發者往往不會手動的處理它們,但是對于跟蹤記錄一個數據來說又很必要,也不允許用對這些數據任意的修改。那么,應該如何操作它才是最好的呢?

當然,最好就是在執行post請求的時候,會有一些方法會根據一定機制自動保存。

而mongoose就存在這樣的機制,可以在Schema的實例上添加pre的方法,代碼如下:

UserSchema.pre("save", function(next) {
  let now = Date.now()
  this.updateAt = now;

  if (!this.createAt) this.createAt = now;
  next()
})

模擬AJAX請求保存數據:

let person3 = new UserModel()
person3.fullname = "甫 杜"

person3
  .save()
  .then(doc => console.log(doc))
  .catch(err => console.log(err))

返回結果:

{ _id: 5c1e006204bad42224374aea,
  createAt: 2018-12-22T09:14:10.862Z,
  updateAt: 2018-12-22T09:14:10.877Z,
  firstname: "甫",
  lastname: "杜",
  __v: 0 }

這個覺過并不能說明問題,它是Schema定義時和pre方法共同作用的結果。

嘗試更新數據來驗證定義的方法,代碼如下:

UserModel.findOne({
  lastname: "杜"
})
.exec()
.then(function(doc) {
  doc.lastname = "杜"
  doc.firstname = "甫"

  doc.save()
  .then(doc => {
    console.log(doc)
  })
  .catch(err => {
    console.error(err)
  })
})
.catch(err => console.log(err))

返回結果:

{ _id: 5c1e006204bad42224374aea,
  createAt: 2018-12-22T09:14:10.862Z,
  updateAt: 2018-12-22T09:15:04.398Z,
  firstname: "牧",
  lastname: "杜",
  __v: 0 }

這里,我們使用save對數據進行更新,當然這對于跟蹤用戶的操作行為很有好處,但是并不是所有的數據都需要的,而對于哪些不需要的,還是可以考慮使用findOneAndUpdate,updae,updateMany的。

細心的同學會發現,其實它和shell命令的db.users.insert({})類似,user.save({})是插入一條數據,而后者則可以插入多條數據。

注:在使用操作數據庫中的數據時一定要注意,要操作的時user.find()user.findOne()返回的一整條數據,如果是實例化了一個UserModel,則會造成數據庫中的數據丟失。

mongoose系列文章

mongoose 再認識(一)

mongoose 再認識(二)

mongoose 再認識(三)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19445.html

相關文章

  • mongoose基本認識

    摘要:安裝然后,我們需要將引入我們的項目中,使用連接我們在本地運行實例名為數據庫。在連接到本地的數據庫,我們需要知道連接的是否成功在中,全部來源于那么,到目前為止,我們創建了一個只有一個屬性值為類型的的。 起步 首先先確定MongoDB和Node.js已經安裝。安裝Mongoose: npm install mongoose 然后,我們需要將mongoose引入我們的項目中,使用mongoo...

    hatlonely 評論0 收藏0
  • 【實戰】用 express+MongoDB 搭建一個完整的前端項目

    摘要:前言要做一個全沾的工程師,對于后端和數據庫來說,即使不認識也要見個面的。基本了解的概念就好,主要是安裝上數據庫,并進行簡單的增刪操作。 前言:要做一個全沾的工程師,對于后端和數據庫來說,即使不認識也要見個面的。本文給的例子很簡單,也貼出來源碼,只要一步步下來,就可以跑起來啦~~~ 思考一個需求:做一個登錄頁面,自己搭建服務和數據庫,將用戶輸入的登錄信息保存到數據庫如何完成呢:首先選擇...

    Steve_Wang_ 評論0 收藏0
  • 「全棧初探」- Mongoose的簡單使用

    摘要:下載依賴包完成項目創建,項目結構連接數據庫在根目錄下創建,輸入以下代碼,監聽的幾個事件,如果以上操作都沒錯的話,那么就會監聽第一個事件事件,表示連接數據庫成功,在最后,我們導出對象,以供其他模塊使用。 一、準備工作 1. 啟動mongo數據庫 關于下載安裝啟動數據庫我這里就不做過多解釋,谷歌下會有很多教程,啟動成功后的命令窗如下所示: showImg(https://segmentfa...

    vboy1010 評論0 收藏0
  • react下express+mongodb入門使用

    摘要:個人用的是腳手架創建的用于開發接口注意使用腳手架時,會自帶,如果再次執行安裝了,運行會報錯,此時需要卸載,然后重新安裝就了。 個人用的是create-react-app腳手架創建的APP Express:用于開發web接口 !!!注意 : 使用腳手架時,node_modules 會自帶express,如果再次執行 npm install express --save 安裝了 expr...

    JohnLui 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<