我有以下架构。
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
对象。
有人可以帮忙吗?
答案 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){
})
}
您无法在单个调用中实现此目的,因为leave
和org
在您的架构中没有任何关系。您必须通过employees
。