在猫鼬中使用"Ref"获取 mongo 数据时出现问题



嘿,我一直在尝试 graphql,所以有一种情况我被困在"Ref"部分...... 假设我有下面定义的模式

用户.js

const userschema = new Schema({
email: {
type: String,
required: true
},
createdevents: [
{
type: Schema.Types.ObjectId,
ref: "Event"
}
]
});
module.exports = mongoose.model("User", userschema);

然后是事件.js

const eventschema=new Schema({
title:{
type:String,
required:true
},
price:{
type:Number,
required:true
},
creator:{
type:Schema.Types.ObjectId,
ref:'User'
}
})
module.exports=mongoose.model('Event',eventschema)

因此,当我处理事件数据时,我尝试通过以下 populate(( 方法获取用户属性

events: () => {
return Event.find().populate('creator').then(result => {
return result.map(e => {
return { ...e._doc, _id: e._doc._id.toString() };
});
});
}

所以我现在可以访问所有用户属性,但是如果我需要访问 User 中"createdevents"中的事件字段怎么办.js意味着我需要再次运行填充方法,以便我可以获取存储在"createdevents"中的所有事件属性,但使用下面的相同代码

简而言之,无论如何,我需要在这里应用另一种填充方法

events: () => {
return Event.find().populate('creator').then(result => {
return result.map(e => {
return { ...e._doc, _id: e._doc._id.toString() };
});
});
}

这样我就可以在创建事件中的所有事件属性中再到达一次

我需要的订单是这样的

事件(创建者( ->已填充(已实现所有用户属性(->现在在用户中.js我必须再次应用填充才能实现所有事件属性

抱歉,如果这听起来很奇怪,我无法解释 我认为它有点像多级人口

现在,如果我运行查询

query{
events{
title
creator{
_id
email
createdevents{
_id
}
}
}
}

我得到

{
"data": {
"events": [
{
"title": "asd",
"creator": {
"_id": "5d64354bfd7bb826a9331948",
"email": "test@test.com",
"createdevents": [
{
"_id": "5d6435a78150062703df70ff"
},
{
"_id": "5d6435ab8150062703df7101"
},
{
"_id": "5d6435cc8150062703df7102"
}
]
}
}
]
}
}

这很好,但我只能获得我需要_ids的事件,以获取可以通过填充方法实现的所有属性

您可以通过以下方式跨多个级别填充:

Event.find()
.populate({
path: 'creator',
populate: { path: 'createdevents' }
});

最新更新