Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用apollo express限制或过滤graphql查询_Javascript_Reactjs_Graphql_Graphql Js_Express Graphql - Fatal编程技术网

Javascript 使用apollo express限制或过滤graphql查询

Javascript 使用apollo express限制或过滤graphql查询,javascript,reactjs,graphql,graphql-js,express-graphql,Javascript,Reactjs,Graphql,Graphql Js,Express Graphql,我是graphql新手。我正在用graphql在后端构建一个react站点。我试图找出如何限制解析程序返回的对象或项的数量。文档非常稀少,我没有看到过滤、限制或排序的清晰示例 我的索引文件如下所示: import express from "express"; import mongoose from "mongoose"; import {ApolloServer, gql} from "apollo-server-express"; import {resolvers} from "./re

我是graphql新手。我正在用graphql在后端构建一个react站点。我试图找出如何限制解析程序返回的对象或项的数量。文档非常稀少,我没有看到过滤、限制或排序的清晰示例

我的索引文件如下所示:

import express from "express";
import mongoose from "mongoose";
import {ApolloServer, gql} from "apollo-server-express";
import {resolvers} from "./resolver"
import {typeDefs} from "./typeDefs"
const bodyParser = require('body-parser');

const server = async () => {

    const app = express();

    app.use(bodyParser.json());

    app.use((req, res, next) => {
        res.setHeader('Access-Control-Allow-Origin', '*');
        res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS');
        res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
        if (req.method === 'OPTIONS') {
          return res.sendStatus(200);
        }
        next();
      });


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

    server.applyMiddleware({app})

    await mongoose.connect("mongoaddr...",{useNewUrlParser:true})

    app.get('/', (req,res)=> res.send('hello'))
    app.listen({port:4001}, ()=>{
        console.log('connected')
    })

}

server()
我的模型:

import mongoose from "mongoose";
export const Post = mongoose.model("Post",{
    word:String, 

    )
我的typeDefs:

import {gql} from "apollo-server-express";
export const typeDefs = gql`

type Query{

    getPosts(limit:Int):[Post!]!

}
type Post {
    id:ID!
    word: String!

}
我的解析器:

import { Post } from "./models/Post";


export const resolvers = {
    Query:{

        async getPosts(_,{ limit },context){
            const post = Post.find()
            console.log(limit)
            return(post)

        }}

}
Mutation:{...}
我完全不明白如何限制getPosts查询。使用Posts.find,我可以获取网站中的所有项目,但当我使用console.log时,它会为我提供大量元数据

有谁能举例说明如何根据我的情况过滤前10个对象吗。我正在筛选的数据是在mongo db中。基本上是一个标准的json,比如:

{
  "data": {
    "getPosts": [
      {
        "word": "test"
      },
      {
        "word": "test1"
      }
    ]
  }
}
它与grapql毫无关系!您必须对从mongoose模型中获取的文档数组进行切片。在您的情况下,getPosts函数将返回一个Post文档数组。因此,您只需切片并返回数组

异步getPosts{limit},上下文{ const post=post.find 返回post.0,限制 }} 或者更好的是,您可以使用猫鼬限制:


就是这样使用mongo限制-检查文档,传递参数非常感谢!我已经偶然发现了。我不明白为什么人们对我的问题或你的答案投了反对票,因为这是正确的。一个graphql中的noob,仅仅跟随一些youtube教程来运行,假设它知道这一点。find是一种特定的mongoose语法吗?只需要知道解析器使用猫鼬语言。无论如何谢谢你!
async getPosts(_,{ limit },context){
  const post = Post.find().limit(limit)
  return post
}}