嵌套Mongoose查询数据未显示在GraphQL查询上

时间:2019-09-28 16:53:43

标签: node.js mongoose graphql apollo-server

我正在尝试使用带有GraphQL和Mongoose的Apollo服务器创建API。 我的问题是,对Mongoose的查询确实返回了数据,但是在测试时GraphQL模型显示为null

我尝试了不同的方法并使用了promises。

    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 个答案:

答案 0 :(得分:0)

您不应在父模型上使用填充。您应该改为定义如何在EntradaInventario解析器中查询嵌套模型。

库存应该看起来像这样:

Inventory : {
    articulo: async (parent, args, { }) => {
      return await Articulo.findOne({
        _id: parent.idArticulo,
      });
    },
  }

这是一个可以执行此操作的仓库,它是一个很好的示例https://github.com/the-road-to-graphql/fullstack-apollo-express-mongodb-boilerplate