Node.js 使用Mongoose和graphql实现分页

Node.js 使用Mongoose和graphql实现分页,node.js,mongoose,graphql,Node.js,Mongoose,Graphql,我正在试验graphql,并使用graphql瑜伽创建了一个简单的服务器。我的Mongoose产品模型查询我的数据库,两个解析器按预期返回数据。到目前为止,一切顺利,我很高兴这是多么容易。然而,我有一个问题。我正在尝试添加一种方法来对来自graphQL的结果进行分页 我试了什么? 1) 向查询类型添加限制参数 2) 通过解析器中的参数访问参数 预期行为 我可以在解析器中使用args.limit参数,并使用它来更改Mongoose函数 实际行为 我无法读取arg对象 完整代码如下。我如何达到这个目

我正在试验graphql,并使用graphql瑜伽创建了一个简单的服务器。我的Mongoose产品模型查询我的数据库,两个解析器按预期返回数据。到目前为止,一切顺利,我很高兴这是多么容易。然而,我有一个问题。我正在尝试添加一种方法来对来自graphQL的结果进行分页

我试了什么? 1) 向查询类型添加限制参数

2) 通过解析器中的参数访问参数

预期行为 我可以在解析器中使用args.limit参数,并使用它来更改Mongoose函数

实际行为 我无法读取arg对象

完整代码如下。我如何达到这个目标

import { GraphQLServer } from 'graphql-yoga'
import mongoose from "mongoose"
import {products} from "./models/products.js"

const connection = mongoose.connect('mongodb://myDB')

const prepare = (o) => {
  o._id = o._id.toString()
  return o
}

const typeDefs = `
  type Product {
    _id: String
    name: String
    description: String
    main_image: String
    images: [String]
  }

  type Query {
    product(_id: String): Product
    products(limit: Int): [Product]
  }
`

const resolvers = {
  Query: {
    product: async (_id) => {
      return (await products.findOne(_id))
    },
    products: async (args) => {
      console.log(args.name)
      return (await products.find({}).limit(args.limit))
    },
  },
}

const server = new GraphQLServer({ 
  typeDefs, 
  resolvers 
})

server.start(() => console.log('Server is running on localhost:4000'))

字段的参数是传递给解析器的第二个参数;第一个参数是父字段解析为的值(或者在查询/突变的情况下是
值)。因此,您的解析器应该更像这样:

product: (root, { _id }) => {
  return products.findOne(_id)
}

测试和立即工作。谢谢你帮助一位graphql初学者:)@daniel我也在测试graphql瑜伽和猫鼬,我正在进行成功的crud操作,但正如我们所知,它不会在删除操作时自动更新缓存。它通过查询在后端成功执行,并返回已删除的对象
id
,但与前端接口相同,它返回空值。您知道为什么会这样吗?这将非常节省时间,你可以提示我在哪里更新我的东西thanks@daniel-rearden@HánzláHábib我不确定这与原来的帖子或这个答案有什么关系。您应该将此作为一个单独的问题发布,提供尽可能多的信息,包括相关代码。@DanielRearden thankyew感谢您的回答我将创建另一个问题,如果可以的话,我会提到您,以便您可以看到详细信息谢谢