带有graphql的mongoose.populate()无法执行“无限”查询

时间:2019-08-30 13:13:11

标签: mongodb mongoose graphql graphql-js

我有一堆用于GraphQL的ApolloServer,其中MongoDB是数据库,而Mongoose是库。 现在,我已经设置了代码,可以执行一些查询,深入到2-3级。但是当我尝试进一步查询并转到我的原始对象时。它将返回一个空值。

但是,我已经尝试过用一些youtube电影+搜索互联网世界来解决Academind的问题。尚未找到解决方案。

我的解析器功能

module.exports = {
  Query: {
    athlete: async (root, args, context) => {
      return await Athlete.findOne({ _id: args._id }).populate('results');
    },
    race: async (root, args) => {
      return await Race.findOne({ _id: args._id }).populate('athletes');
    },
    result: async (root, args) => {
      return await Result.findOne({ _id: args._id })
        .populate('race')
        .populate('athlete')
        .exec();
    },
    athletes: async () => {
      return await Athlete.find().populate('results');
    },

    races: async () => {
      return await Race.find().populate('athletes');
    },

    results: async () => {
      return await Result.find()
        .populate('race')
        .populate('athlete')
        .exec();
    }  
  }
};

更容易去github:https://github.com/axelvuylsteke/fullstack-graphql-vue/tree/graphQL_stackOverflow_question

npm run dev to start it in dev mode.

您可以运行查询,第一个查询将获得race.name的空值,第二个查询将结果作为源根时,您会得到名称的值:

query searchAthlete {
  athlete(_id: "5d690a25a1917025486c27ac") {
    _id
    country
    results{
      _id
      race{
        _id
        name
      }
    }
  }
}
query searchResults {
  results {
    _id
    race{
      _id
      name
    }
  }
}

我希望从对象到对象的查询有无限的可能... 通常,您可以将dev模式设置为所有开放IP地址,从而连接到mongoDB。 小背景: 运动员将存储比赛结果。 比赛将存储所有参与的运动员。 结果会将结果本身存储在运动员和执行结果的比赛中。

0 个答案:

没有答案