node.js - 查询名字、姓氏作为全名

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

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

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

最佳答案

使用lean()函数意味着你的查询结果将只是JavaScript对象,没有任何 Mongoose 的东西。

这意味着您将无法获得虚拟资源。

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

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

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

我希望这会有所帮助。

关于node.js - 查询名字、姓氏作为全名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49665786/

相关文章:

node.js - 运行 npm build 时出现以下错误

node.js - DigitalOcean Droplet IP 地址不工作

connect.c :1:18: fatal error: bson. h: 没有那个文件或目录

javascript - 为什么 'find' 查询在 MongoDB 中返回一个 Query 对象?

node.js - Mongoose findById 检查属性是否存在

javascript - 在 Webstorm 中设置 Angular.js?

node.js - Node.js 的更改应该是即时的吗?

MongoDB读锁

node.js - Mongoose 更新时如何允许空字段?

node.js - Mongoose 验证错误