javascript - 使用 apollo-express 限制或过滤 graphql 查询
问题描述
我是graphql的新手。我正在后端使用 graphql 构建一个反应站点。我试图弄清楚如何限制解析器返回的对象(或项目)的数量。文档非常稀缺,我没有看到过滤、限制或排序的明确示例。
我的索引文件如下所示:
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,
)
我的类型定义:
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
所以,你只需要切片并返回数组。
async getPosts(_,{ limit },context){
const post = Post.find()
return post.slice(0, limit)
}}
或者更好的是,您可以使用mongoose
限制:
async getPosts(_,{ limit },context){
const post = Post.find().limit(limit)
return post
}}
而已 。
推荐阅读
- python - 删除python pandas数据框中出现的模式
- python - python pandas dataframe groupby or pivot_table
- java - Redission 中的嵌套 RMap
- python - 如何在多个scrapy爬虫中实现一个代理池?
- php - 在 AWS 中使用 cognito 调用未定义的成员函数 adminInitiateAuth()
- vba - Inventor API / VBA AutoBendRadius 在 3D 草图上
- r - 如何在不重新调整结果的情况下使用 ggradar
- powershell - foreach 多次返回一个值
- reporting-services - D365 本地报告服务器 Web 门户应用程序 500 内部错误
- pandas - Pandas .any() 每列返回一个布尔值