mongoose — 檢查ObjectId 是否存在於數組中

遇到了檢查mongoose數組中是否存在某個ObjectId 的情況。
最後通過 array的some來驗證。
結合項目來說,就是檢查用戶已兌換的禮物列表中是否存在 將要兌換的禮物的ID,如果存在,就提醒用戶您已經兌換過,無法再兌換。

model中:userSchema

// giftList是一個記錄所有已領禮物的數組。

giftList: [{
    giftId: {type: ObjectId},//禮物ID
    exchengeDate: {type: Date, default: Date.now}//兌換時間
      }],

判斷

 var isInArray = user.giftList.some(function (giftItem) {                       
   console.log('giftItem.giftId:' + giftItem.giftId); 
   console.log('gift._id:' + gift._id);  
   console.log('isequals?' + giftItem.giftId.equals(gift._id))    
   return giftItem.giftId.equals(gift._id);
   });

注意,儘管在控制檯看到如下輸出,但是不能直接使用==來比較

giftItem.giftId:557f881709583c641e57da73
gift._id:557f881709583c641e57da73

console.log(‘is==?’+giftItem.giftId==gift._id)

is==?false

原來giftItem.giftId是一個ObjectID…
這裏寫圖片描述

如果使用==來比較,則比較的是:

console.log(‘is==?’+giftItem.giftId.id == gift._id.id)

is==?true

參考:
檢查ObjectId 是否存在於數組中:
http://stackoverflow.com/questions/19737408/mongoose-check-if-objectid-exists-in-an-array

some 方法 (Array) (JavaScript)
https://msdn.microsoft.com/library/ff679978(v=vs.94).aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章