向猫鼬查找查询结果添加字段
Posted
技术标签:
【中文标题】向猫鼬查找查询结果添加字段【英文标题】:Adding a field to mongoose find query result 【发布时间】:2017-09-21 20:21:45 【问题描述】:我在猫鼬中有这个员工模式:
employeesSchema = mongoose.Schema(
id:
type: Number,
required: true
,
firstName: String,
lastName: String,
title: String,
managerId:
type:Number,
required: false
,
managerName:
type: String,
required: false
,
phone: String,
mobilePhone: String,
email: String,
picture: String,
);
我有我的功能来寻找员工:
module.exports.getEmployeeById = function(id, callback)
Employee.find( id: id , callback);
但我希望在我的 Schema 的所有字段之外的结果中再添加一个字段,该字段是具有 managerId:id 的员工的数组(该员工下方的员工)。
谢谢
【问题讨论】:
我不认为这提供了足够的细节来值得一个完整的答案,但你正在寻找的是所谓的填充(如连接 SQL):mongoosejs.com/docs/populate.html 我不想填充我的模型或数据库我想在查询 json 响应中添加一个字段 @YassineBHS 假设您不想像提到的那样使用populate
,那么一个简单的循环有什么问题?
如果我使用填充,我必须更改我不想要的架构,我希望能够获得这样的 json 响应:employee-directory-services.herokuapp.com/employees/1
【参考方案1】:
您可以使用 $lookup
管道运算符来实现“自我加入”,并让具有此 id
的员工作为他们的经理(在名为 subordinates
的数组中),如下所示:
module.exports.getEmployeeById = function(id, callback)
Employee.aggregate([
"$match": id: id ,
"$lookup":
"from": "employees",
"localField": "id",
"foreignField": "managerId",
"as": "subordinates"
]).exec(callback);
【讨论】:
这对我不起作用,我在 json 响应中得到一个空数组 您是否尝试过仅使用$match
管道来运行它作为调试操作的一种方式?可能是它没有找到匹配项,因此是空数组。如果是这种情况,您还可以通过硬编码现有文档的 id
值来调试管道,或者仅使用 $lookup
步骤运行管道。
当我使用 Employee.find( id: id , callback);它可以工作,但是当我将聚合与 $match 一起使用时(带或不带 $lookup)它不起作用,我得到一个空数组
但是当我像你说的那样将 1 作为 id 传递给它工作的函数时,但是我怎样才能将它传递给变量??
是的,它有效,谢谢.. 但问题是这个聚合函数返回一个数组,我只想要一个元素而不是数组,因为这就是我在 react native 中读取它的方式。顺便说一句,我会检查你的答案以上是关于向猫鼬查找查询结果添加字段的主要内容,如果未能解决你的问题,请参考以下文章