瘦()里面填充了猫鼬

时间:2015-08-05 07:12:30

标签: node.js mongoose mongoose-populate

我正在 mongoose 中填充用户集合,并且如果用户使用社交帐户注册,则想要设置标记。所以我在填充中选择了这些字段。但出于安全方面的考虑,我并不想将其作为回应。所以我使用lean()将其转换为普通对象,并将值设置为null。但是,如果为特定用户设置了值null,则会为该user_id设置该值为null。如何设置它们null或如何隐藏它们以免响应。

 Pins.find(condition)
   .limit(limit)
   .sort({time: -1})
   .populate({
     path: 'user_id',
     select: '_id name pic twitter_id fb_id',
     options: { lean: true}
   })
   .lean()
   .exec(function(err, data) {

        if(data){
         var flag = 0
            async.eachSeries(data, function(v, callback1) {

              if(v.user_id.twitter_id || v.user_id.fb_id ){
                  v.socialaccount=1
                  v.user_id.fb_id =''
                   v.user_id.twitter_id =''
              }else{
                  v.socialaccount=0 
                      v.user_id.fb_id =''
                   v.user_id.twitter_id =''
              }
             callback1()



     },function(){
              console.log(data)
             callback(data)  

            })

        } else {
            callback(data)
        }

    })

提前致谢

1 个答案:

答案 0 :(得分:10)

在这里。

Pins.find(condition)
  .limit(limit)
  .sort({time: -1})
  .populate({
    path: 'user_id',
    select: '_id name pic twitter_id fb_id',
    options: { lean: true}
  })
  .lean().exec(function(err, pins) {
  if(pins){

    pins = _.map(pins,function(pin) {

      //Setting the flag for social account
      pin.socialaccount = (pin.user_id.twitter_id || pin.user_id.fb_id );

      //Omitting the twitter_id and fb_id fields from user_id object
      pin.user_id.twitter_id = undefined;
      pin.user_id.fb_id = undefined;
      return pin;
   });

   return res.send(pins);
 }

})

我已经从查询查询中映射了针脚集合,以便您可以设置 socialaccount 标记,并可以设置 undefined

所需的属性

但是我不确定您是否可以使用_.omit(pin.user_id,'twitter_id')代替pin.user_id.twitter_id = undefined。需要测试一下!

结果引脚集合现在将具有您想要的其他用户属性。 希望它有所帮助:)