遇到了檢查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