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…
mongoose — 检查ObjectId 是否存在于数组中_第1张图片

如果使用==来比较,则比较的是:

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

你可能感兴趣的:(array,nodejs,mongoose)