【发布时间】:2018-03-06 23:18:47
【问题描述】:
是否可以同时利用 GraphQL 和 Mongoose?
到目前为止,我已经能够集成 GraphQL 和 Mongoose 来处理填充数据库,但我很难理解它如何用于检索数据,特别是具有嵌套引用的数据。
考虑这个架构:
const fooSchema = new Schema({
name: { type: 'String', required: true },
bar: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Bar',
required: false,
}],
});
Bar 架构本质上是相同的,只是“名称”字段。
是否可以运行 GraphQL 查询以使用“bar”中的引用填充数据?
目前,我们正在使用 GraphQL-Tools 创建我们的 typeDefs、Mutations 和 Queries,它们看起来像这样:
const typeDefs = `
type Foo {
name: String!,
bars:[Bar]
}
type Bar {
_id: ID,
name: String,
}
type Query {
allFoos: [Foo!]!
foo(_id: ID!): Foo
}
type Mutation {
...
}
`;
module.exports = makeExecutableSchema({typeDefs, resolvers});
最后是一个如下所示的查询指令:
const allFoos = async (root, data) => {
return await Foo.find({});
};
我可以将查询指令更改为使用 .populate() 来获取 Bar,但这实际上并没有最终填充结果,我认为这是因为 typeDef 的设置方式。
那么有没有可能让这两个概念一起工作呢?同时使用它们是否有意义?
【问题讨论】:
-
我认为是因为 typeDef 的设置方式,为什么?
标签: node.js mongodb mongoose graphql graphql-js