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);它的工作原理 ,但是當我使用與$匹配的聚合(有或沒有$查找)它不起作用,我得到一個空數組 –