Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用“获取mongo数据时出现问题”;参考「;猫鼬_Javascript_Node.js_Mongodb_Mongoose_Graphql - Fatal编程技术网

Javascript 使用“获取mongo数据时出现问题”;参考「;猫鼬

Javascript 使用“获取mongo数据时出现问题”;参考「;猫鼬,javascript,node.js,mongodb,mongoose,graphql,Javascript,Node.js,Mongodb,Mongoose,Graphql,嘿,我一直在尝试graphql,所以有一种情况,我被困在“参考”部分。。。假设我有太多的模式,定义如下 User.js const userschema = new Schema({ email: { type: String, required: true }, createdevents: [ { type: Schema.Types.ObjectId, ref: "Event" } ] }); module.expor

嘿,我一直在尝试graphql,所以有一种情况,我被困在“参考”部分。。。假设我有太多的模式,定义如下

User.js

const userschema = new Schema({
  email: {
    type: String,
    required: true
  },
  createdevents: [
    {
      type: Schema.Types.ObjectId,
      ref: "Event"
    }
  ]
});
module.exports = mongoose.model("User", userschema);
然后是events.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()方法获取用户属性

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

总之,我需要在这里应用另外一种填充方法

 events: () => {
                return Event.find().populate('creator').then(result => {
                  return result.map(e => {
                    return { ...e._doc, _id: e._doc._id.toString() };
                  });
                });
              }
这样我就可以在createdevents中的所有事件属性中再访问一次

我需要的顺序是

Events(creator)->used populate(获得所有用户属性)->现在在user.js中,我必须再次应用populate以获得所有事件属性

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

现在如果我运行查询

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"
            }
          ]
        }
      }
    ]
  }
}

这很好,但我只能获取事件的ID,我需要获取通过填充方法i gues可以实现的所有属性。您可以通过以下方式跨多个级别填充:

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

谢谢,成功了!你能看一看吗?其实是同一个问题
Event.find()
     .populate({
       path: 'creator',
       populate: { path: 'createdevents' }
     });