我有三张桌子' case','合作伙伴'和' casepartners'具有以下结构:
案例:id,subject,description
合作伙伴:ID,姓名,地址
casepartners :情况下,合伙人,createdAt
我想列出所有案例,并列出每个案例,casepartners记录案例ID的相同位置。
我正在使用此代码:
Case.find().sort('-created').exec(function (err, cases) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(cases);
}
});
它显示所有案例都很好,但我还想为每个案例对象显示该案例ID的 casepartners 列表...
让我们说一些合作伙伴订阅了相同的案例,我想列出所有这些合作伙伴,或者只计算有多少合作伙伴订阅了这个案例。
我正在使用Angularjs列出所有使用ng-repeat的情况但如果我必须单独调用以在ng-repeat中显示每个案例的casepartners记录或者通过使用某些函数将其附加到同一函数中,我会感到困惑一种.populate()或其他与实体关系的东西。
这些是定义的模型:
var CaseSchema = new Schema({
subject: {
type: String,
default: '',
trim: true,
required: 'Subject cannot be blank'
},
description: {
type: String,
default: '',
trim: true
},
created: {
type: Date,
default: Date.now
},
customer: {
type: Schema.ObjectId,
ref: 'Customer'
},
category: {
type: Schema.ObjectId,
ref: 'Category'
}
});
var CasePartnerSchema = new Schema({
case: {
type: Schema.ObjectId,
ref: 'Case'
},
partner: {
type: Schema.ObjectId,
ref: 'Partner'
},
created: {
type: Date,
default: Date.now
}
});
var PartnerSchema = new Schema({
name: {
type: String,
trim: true,
default: ''
},
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
任何人都可以帮忙吗?
答案 0 :(得分:1)
尝试mongoose-reverse-populate。在mongoose中有一种叫做populate的方法,但是当你第一次搜索caseparters并填充案例类型时,它会帮助你。然而你想要的却与此相反。
答案 1 :(得分:1)
如果可能,我会建议重新定义您的集合(表格),因为CasePartner集合有点多余。
我建议你只有一个案例集合,然后在该集合中有一组合作伙伴,而不是case和casePartner集合。
您的架构将如下所示:
var CaseSchema = new Schema({
partners: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Partner'
}],
subject: {
type: String,
default: '',
trim: true,
required: 'Subject cannot be blank'
},
description: {
type: String,
default: '',
trim: true
},
created: {
type: Date,
default: Date.now
},
customer: {
type: Schema.ObjectId,
ref: 'Customer'
},
category: {
type: Schema.ObjectId,
ref: 'Category'
}
});
您的查找将如下所示:
Case
.find({})
.sort('-created')
//.populate() populates all info from the partnersSchema for each partner
.populate('partners')
.exec(function(err, cases) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(cases);
}
});
有关MongoDB架构设计的更多信息,请查看this。