.Net6 + GraphQL + MongoDb 实现Query排序功能

介绍

本节我们给Query加上排序功能.

正文

修改Program

builder.Services
    .AddGraphQLServer()
    .AddQueryType<PostQuery>()
    .AddMongoDbFiltering()
    .AddMongoDbSorting()
    .AddMongoDbProjections();

修改PostQuery.cs

   public class PostQuery
    {
        [UseProjection]
        [UseFiltering]
        [UseSorting]
        public IExecutable<Post> GetPosts([Service] DbContext db)
        { 
            
            return db.Post.AsExecutable();
        }
    }

这时候我们去https://localhost:7145/graphql/调用的接口.加上order排序

query testGetBookPage {
  posts(skip: 0, take: 50) {
    items {
      id
      title
      comments {
        name
      }
    }
    totalCount
    pageInfo {
      hasNextPage
      hasPreviousPage
    }
  }
}

我们看下mongodb的监控信息,已经对我们的page做出了变化

{
  "op": "query",
  "ns": "GQL_Example.post",
  "command": {
      "find": "post",
      "filter": { },
      "projection": {
          "Comments.Name": NumberInt("1"),
          "Title": NumberInt("1"),
          "_id": NumberInt("1")
      },
      "skip": NumberInt("0"),
      "limit": NumberInt("51"),
      "$db": "GQL_Example",
      "lsid": {
          "id": UUID("9855c568-2209-492d-a1b1-fad76bd6cd0e")
      },
      "$clusterTime": {
          "clusterTime": Timestamp(1676094791, 1),
          "signature": {
              "hash": BinData(0, "AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
              "keyId": NumberLong("0")
          }
      }
  }
}

到这一节一个功能齐全的Query操作就完成了,它已经和我们日常业务开发的接口所需要的功能基本一样了。

大家有没有发现整个Query每一节我改的东西很少,但是功能却被正常实现了,而且现在这个接口非常灵活。
前端想要根据什么样的条件筛选出什么数据不需要我们去写好几个同业务的接口去做,一个接口就解决了问题。

结语

本系列主要将GraphQL的使用,示例项目不能应用于生产,后续发一些GraphQL库出来讲解生产中的实际应用

联系作者:加群:867095512 @MrChuJiu

posted @ 2023-02-13 20:42  初久的私房菜  阅读(11445)  评论(0编辑  收藏  举报
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/