如何通过引用的Object获取所有值?

时间:2014-08-05 06:34:54

标签: node.js mongodb mongoose mongodb-query

我有以下架构。

var orgSchema = new Schema({
     name    : String,
     email   : String,
     webiste : String
});

var empSchema = new Schema({
     name    : String,
     email   : String,
     role    : String,
     org     : { type: Schema.Types.ObjectId, ref: 'org'}
});

var leaveSchema = new Schema({
     emp     : { type: Schema.Types.ObjectId, ref: 'emp'},
     from    : Date,
     to      : Date,
     reason  : String
});

empSchema orgSchema对象和leaveSchema引用empSchema对象。

我试过自己

如果获得特定组织中的所有员工,我会在org中传递query param个对象ID。

EmployeeModel.find(org: req.query.org, 
                   null , 
                   {limit: 10 , skip: 0 }, 
                   function(err, employees)(
   .....
   .....
));

这很好。

现在我正试图让特定组织的所有员工离职。 以同样的方式我在org中传递query param ObjectId。

LeaveModel.find(org: req.query.org, 
                null , 
                {limit: 10 , skip: 0 }, 
                function(err, employees)(
   .....
   .....
));

但我坚持如何得到它?导致Leave只引用Employee对象。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

在您当前的架构中,您无法在一次通话中执行此操作。 你可以这样做:

var ob={};
if(req.query.to)
       ob.to=req.query.to;
if(req.query.from)
       ob.from=req.query.from;
if(!req.query.emp){
   EmployeeModel.find(org: req.query.org, 
               null , 
               function(err, employees)({

    var empid_arr=employees.map(function(x){return x._id});
    //empid_arr has all _ids of emplyees in the org.
    //now getting all the leaves

    //building a dynamic query

    ob.emp={$in:empid_arr};


    LeaveModel.find(ob, 
            null , 
            {limit: 10 , skip: 0 }, 
            function(err, leaves){
    })
})
}else{
    ob.emp=req.query.emp;
    LeaveModel.find(ob, 
            null , 
            {limit: 10 , skip: 0 }, 
            function(err, leaves){
    })
}

您无法在单个调用中实现此目的,因为leaveorg在您的架构中没有任何关系。您必须通过employees