【发布时间】:2017-04-23 09:23:50
【问题描述】:
我有以下 Mongoose 架构:
员工架构:
var EmployeeSchema = new Schema({
name : String,
employeeDetailsId: {
type: Schema.Types.ObjectId,
ref: 'employeedetails'
}
});
EmployeeDetailSchema:
var EmployeeDetailSchema = new Schema({
employeeId: {
type: Schema.Types.ObjectId,
ref: 'employee'
},
primarySkills: [
{
type: Schema.Types.ObjectId,
ref: 'skills'
}
],
});
技能架构:
var SkillsSchema = new Schema({
name: {
type: String,
required: true
}
});
EmployeeDetailSchema 数据按需保存,例如将特定技能分配给员工时。一旦EmployeeDetail 文档被保存,则对应的EmployeeDetailID 将作为employeeDetailsId 保存回EmployeeSchema。
现在EmployeeSchema 和EmployeeDetailSchema 之间存在双向关系。
注意: 多个技能可以与一个员工相关联,它们在 EmployeeDetails Schema 中存储为 ObjectID 的数组。
用例:
我想获取所有与他们相关的特定技能的员工,技能将被输入到 Mongoose / Mongo 查询中。
假设输入技能 ID 为 1234,那么我想在 EmployeeDetail > PrimarySkills 数组中获取技能 ID 为 1234 的所有员工。
以下是我尝试使用 Mongoose 的方法:
EmployeeModel.aggregate([
{
$lookup: {
from: 'employeedetails',
localField: 'employeeDetailsId',
foreignField: '_id',
as: 'details'
}
},
{
$match: {
$and: [
{ "details.primarySkills": { "$exists": true } },
{
"details.primarySkills": {
$in: [mongoose.Types.ObjectId(req.params.skillId)]
}
}
]
}
}
]).exec(function (err, result) {
if (err) return res.send('400', {
message: 'Unable to fetch employees data by status. Please try again later'
});
return res.jsonp(result);
});
结果:空数组。
我不知道哪里出了问题,需要一些帮助。
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query aggregation-framework