嵌套的 Mongoose 查询数据未显示在 GraphQL 查询中
Posted
技术标签:
【中文标题】嵌套的 Mongoose 查询数据未显示在 GraphQL 查询中【英文标题】:Nested Mongoose queries data not showing on GraphQL query 【发布时间】:2020-01-28 14:24:53 【问题描述】:我正在尝试使用带有 GraphQL 和 Mongoose 的 Apollo-server 创建一个 API。
我的问题是对 Mongoose 的查询确实返回了数据,但 GraphQL 模型在我测试时显示为 null
。
我尝试了不同的方法并使用了 Promise。
type Articulo
id: ID
nombre: String
codigoDeBarras: String
codigo: String
type EntradaInventario
id: ID
articulo: Articulo
inventario: Inventario
cantidad: Float
type Almacen
id: ID
nombre: String
type Inventario
id: ID
almacen: Almacen
nombre: String
type Query
articulo(codigoDeBarras: String): Articulo
entradaInventario(inventario: String): [EntradaInventario]
type Mutation
addEntradaInventario(idArticulo: String, idInventario: String, cantidad: Float): EntradaInventario
addAlmacen(nombre: String): Almacen
addInventario(idAlmacen: String, nombre: String): Inventario
const EntradaInventarioModel = Mongoose.model("EntradaInventario",
_id: Schema.Types.ObjectId,
idArticulo: type: Mongoose.Schema.Types.ObjectId, ref: 'Articulo',
idInventario: type: Mongoose.Schema.Types.ObjectId, ref: 'Inventario',
cantidad: Number
, "entradainventarios");
Query:
articulo: (_, args) => ArticuloModel.findOne(
'codigoDeBarras': args.codigoDeBarras
).exec(),
entradaInventario: (_, args) =>
EntradaInventarioModel.find(idInventario: args.inventario)
.populate('idArticulo')
.exec(),
【问题讨论】:
【参考方案1】:您不应该在父模型上使用填充。相反,您应该定义如何在 EntradaInventario 解析器中查询嵌套模型。
库存应如下所示:
Inventory :
articulo: async (parent, args, ) =>
return await Articulo.findOne(
_id: parent.idArticulo,
);
,
这是一个可以做到这一点的 repo,它是一个很好的例子 https://github.com/the-road-to-graphql/fullstack-apollo-express-mongodb-boilerplate
【讨论】:
库存应该是一个新查询还是在 entradaInventario 解析器中? 您的entradaInventario
查询应该只有EntradaInventarioModel.find(idInventario: args.inventario)
命令。 EntradaInventario
类型应该有一个解析器,用于查询该类型上的 articulo 和 inventario 字段
GraphQL 会知道去EntradaInventario
的解析器来获取文章和发明以上是关于嵌套的 Mongoose 查询数据未显示在 GraphQL 查询中的主要内容,如果未能解决你的问题,请参考以下文章
如何处理一对多关系中的嵌套 mongoose 查询和异步问题?