猫鼬显示与关系
Mongoose display with relationships
我有三个表 'cases'、'partners' 和 'casepartners',结构如下:
cases: id,subject,description
partners: id,name,address
casepartners:case,partner,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'
}
});
有人可以帮忙吗?
尝试mongoose-reverse-populate。在 mongoose 中有一种称为 populate 的方法,但是当您第一次搜索 caseparters 和 populate case types 时,它会帮助您。但是你想要的是相反的。
如果可能的话,我会建议重新定义您的集合(表),因为拥有 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);
}
});
查看 this 了解更多关于 MongoDB 架构设计的信息。
我有三个表 'cases'、'partners' 和 'casepartners',结构如下:
cases: id,subject,description
partners: id,name,address
casepartners:case,partner,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'
}
});
有人可以帮忙吗?
尝试mongoose-reverse-populate。在 mongoose 中有一种称为 populate 的方法,但是当您第一次搜索 caseparters 和 populate case types 时,它会帮助您。但是你想要的是相反的。
如果可能的话,我会建议重新定义您的集合(表),因为拥有 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);
}
});
查看 this 了解更多关于 MongoDB 架构设计的信息。