1

我对猫鼬该员工架构:添加一个字段,猫鼬发现查询结果

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(该员工以下的员工)的员工。

感谢

+0

我不觉得这提供了足够的细节值得一个完整的答案,但你正在寻找什么被称为填充(像SQL连接):http://mongoosejs.com/docs/populate.html – supersam654

+0

我不知道不想填充我的模型或数据库我想在查询json r中添加一个字段esponse –

+0

@YassineBHS假设你不想像前面提到的那样使用'populate',那么简单的循环有什么问题? – georoot

回答

1

可以使用$lookup管道运营商DSO“自我加入”而获得这一id员工为他们的经理(在名为subordinates数组)如下:

module.exports.getEmployeeById = function(id, callback){ 

    Employee.aggregate([ 
     { "$match": { id: id } }, 
     { 
      "$lookup": { 
       "from": "employees", 
       "localField": "id", 
       "foreignField": "managerId", 
       "as": "subordinates" 
      } 
     } 
    ]).exec(callback); 

} 
+0

this isn没有为我工作,我在json响应中得到一个空数组。 –

+0

您是否尝试过使用'$ match'管道运行它作为调试操作的一种方式?可能是因为它没有找到匹配,因此是空数组。如果是这种情况,那么你也可以通过硬编码现有文档的'id'值来调试流水线,或者只用'$ lookup'步骤来运行流水线。 – chridam

+0

当我使用Employee.find({id:id},callback);它的工作原理 ,但是当我使用与$匹配的聚合(有或没有$查找)它不起作用,我得到一个空数组 –