【发布时间】:2020-01-02 18:20:38
【问题描述】:
我有 2 个表interestTypes 和interests 表,兴趣记录存储了interestTypeId 引用。
现在我需要兴趣类型列表及其兴趣。
const interestSchema = new mongoose.Schema(
{
name: {
type: String,
trim: true,
minlength: 3,
maxlength: 50,
required: true
},
interestTypes: [
{
interestTypeId: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'interestType'
}
}
]
},
{
timestamps: true
}
)
const interestTypeSchema = new mongoose.Schema(
{
name: {
type: String,
trim: true,
minlength: 3,
maxlength: 50,
required: true
}
},
{
timestamps: true
}
)
我知道这可以通过查找聚合来完成,但我搞砸了。这段代码是用兴趣模型写的
interestSchema.statics.getTypes = function() {
return new Promise((resolve, reject) => {
this.aggregate([
{
"$lookup":
{
"from": "interestTypes",
"localField": "interestType",
"as": "interestTypes",
"foreignField": "_id",
}
},
{
"$group":
{
"_id": "$_id",
"interestTypes": { "$push": "$interestTypes" }
}
}
],
function(err, result) {
if (err) return reject(err)
resolve(result)
}
)
}
无法得到想要的结果
我希望这个方法返回的是这样的
[
{
id: interestTypeIdRef1,
name: interestType1
interests: [
{
id: interestIdRef1,
name: interestType1
},
{
id: interestIdRef2,
name: interestType2
},
{
id: interestIdRef3,
name: interestType3
}
]
},
{
id: interestTypeIdRef2,
name: interestType1
interests: [
{
id: interestIdRef2,
name: interestType1
},
{
id: interestIdRef3,
name: interestType2
},
{
id: interestIdRef4,
name: interestType3
}
]
}
]
【问题讨论】:
标签: mongodb mongoose aggregate lookup