【问题标题】:lean() inside populate in mongoose猫鼬中的lean()填充
【发布时间】:2015-10-27 19:55:02
【问题描述】:

我在 mongoose 中填充一个用户集合,如果用户使用社交帐户注册,我想设置一个标志。所以我选择了 populate 中的那些字段。但出于安全考虑,我不想通过它作为回应。所以我使用lean() 将其转换为普通对象并将值设置为null。但是,一旦为特定用户设置了值null,那么它将为该user_id 设置该值为空。如何设置它们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)
        }

    })

提前致谢

【问题讨论】:

  • 到目前为止,我的理解是,您有一个 Pins 集合,其中有一个引用用户集合的用户 ID。并且您希望用户做出的 Pin 在 twitter 或 facebook 上具有与您的数据库相关联的社交帐户的响应。我说的对吗?
  • 是的。我只想为此设置一个标志。但我不想在回复中传递 fb_id 或 twitter_id
  • 您可以使用 lodash...从结果对象数组中删除 'user_id'。
  • 但如果我删除 user_id 所有填充的用户详细信息将被删除,但我需要其他详细信息,如姓名、图片

标签: node.js mongoose mongoose-populate


【解决方案1】:

在这里。

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);
 }

})

我已经映射了 find 查询中的 pin 集合,这样您就可以设置 socialaccount 标志并将不需要的属性设置为 undefined

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

结果 pin 集合现在将具有您想要的其他用户属性。 希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 2016-10-10
    • 2019-09-16
    • 2015-07-13
    • 2020-01-17
    • 2020-07-25
    • 2021-05-03
    • 2021-01-09
    相关资源
    最近更新 更多