【问题标题】:Query firstname, lastname as fullname查询名、姓为全名
【发布时间】:2018-12-18 01:30:40
【问题描述】:

我正在尝试将名字和姓氏作为全名,因为我在模型中设置

      "chatBotId": String,
        "firstName":String,
        "lastName":String,
        "contactId" : String,
        "type" : String,
         "userId":String,
        "BotResponseBlocked": Boolean
    }
);

chatUserSchema.virtual('fullName').get(function(){

    return this.firstName+' '+ this.lastName;
})

但我的查询没有返回全名。

chatUsersModel.find({chatBotId:chatBotId},{'_id':0,'userId':1, 'firstName':1, 'lastName':1}).lean().
            exec((err,result)=>{

            callback(result);
        })  

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    使用 lean() 函数意味着您的查询结果将只是 JavaScript 对象,没有猫鼬的东西。

    这意味着您不会获得虚拟。

    您可以从查询中删除 lean(),或者有一个插件可用于在名为 mongoose-lean-virtuals 的精益查询中包含虚拟:: p>

    const mongooseLeanVirtuals = require('mongoose-lean-virtuals')
    
    // ...
    
    chatUserSchema
      .virtual('fullName')
      .get(function() {
        return this.firstName + ' ' + this.lastName
      })
    
    // Use plugin after defining virtuals
    chatUserSchema
      .plugin(mongooseLeanVirtuals)
    

    你可以告诉 lean() 包括这样的虚拟:

    chatUsersModel
      .find({ ... })
      .lean({ virtuals: true })
      .exec((err, result) => {
        callback(result)
      })  
    

    现在应该在结果中包含您的虚拟对象。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用$concat 聚合运算符来获取firstNamelastName 作为fullName

      chatUsersModel.aggregate([{
        '$project' : {  
          'fullName' : {'$concat' : [ '$firstName', ' ' ,'$lastName' ]}
        }
      }]);
      

      【讨论】:

        猜你喜欢
        • 2019-05-19
        • 2019-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-15
        相关资源
        最近更新 更多