【问题标题】:Sorting MongoDB data in GraphQL resolver (Meteor/React/Apollo)在 GraphQL 解析器(Meteor/React/Apollo)中对 MongoDB 数据进行排序
【发布时间】:2021-03-28 23:29:18
【问题描述】:

我正在尝试对 GraphQl 中的查询返回的一些数据进行排序。我正在运行 Meteor/React/Apollo/Graphql 堆栈,这一行允许我在解析器 resolvers.js 中获取数据库中的所有数据:return database.find({}) 我想在服务器端按“名称”对其进行排序" 字段,根据文档和到目前为止我在网上找到的所有其他内容,return database.find({}).sort({name:1}) 应该已经删除了它,但它实际上并没有返回任何东西,我似乎无法弄清楚为什么,什么也没有出现我的控制台并没有抛出任何错误,因此我相信它只是 null 或空。

在我的 Robo3T 控制台中,我可以运行 database.find({}).sort({name:1}),我可以看到实际正在排序的数据。根据docs,我认为这可能是由于Node implementation,所以我尝试了sort([["name",1]]),但也没有成功,我不太确定该怎么做。

如果没有办法做到这一点 - 我应该只依赖客户端排序吗?它的条目并不多,

尽管如此,我还是想问这个问题,即使在我的数据库中对它进行一次排序就足以应对这种特定情况,否则我将如何在解析器中对数据进行排序,因为在其他情况下我需要这样做?

谢谢!

编辑 - 这就是我所拥有的:

export default {
    Query: {
        test_query(obj, args, context) {
            // Bottom line is output
            console.log("test1");
            console.log(Database.find({}).sort({name:1}));
            // Bottom line is not output
            console.log("test2");
            return Database.find({});
        },
}

EDIT2:我的数据库定义为Database = new Mongo.Collection("db_name")

【问题讨论】:

  • @xadm 是的,我尝试在返回之前登录,但什么也没有。没有异步/等待。我需要那些吗?我用更多代码更新了帖子,以将其放入上下文中。
  • 啊,本机.... IDK,但日志会有所帮助;)
  • 您能否分享定义和初始化Database 的代码?是流星收藏吗?

标签: reactjs mongodb meteor graphql apollo


【解决方案1】:

我相信您正在查看错误的文档。如果这确实是流星,那么Database 可能是meteor collection,而不是原始的 mongo 集合。流星收藏的界面略有不同。就你而言,我认为你想要:

Database.find({}, {sort: {name: 1}}).fetch();

【讨论】:

  • 就是这样。我已将我的数据库声明为Database = new Mongo.Collection("db_name"),但我不知道它的处理方式不同。谢谢!
【解决方案2】:

.find() 返回一个游标:

http://mongodb.github.io/node-mongodb-native/3.6/api/Collection.html#find

这适用于 Meteor pubsub,但不适用于 GraphQL/Apollo。试试.find().toArray()

http://mongodb.github.io/node-mongodb-native/3.6/api/Cursor.html#toArray

【讨论】:

  • 谢谢,但不幸的是,这并没有真正改变任何东西。当我尝试console.log(Database.find({}).toArray) 时,它会打印出undefined。我尝试了不同的组合和附加.find(), .toArray, .sort() 的顺序,但无济于事。它打印undefined 或抛出错误消息,说明它们不是函数。顺便说一句,我尝试了toArray() - 它抛出了一个错误:Database.find(...).toArray is not a function。我不得不删除括号。
猜你喜欢
  • 2023-03-13
  • 2019-11-04
  • 2021-03-25
  • 2019-04-14
  • 2021-05-01
  • 2018-01-08
  • 2021-01-25
  • 2020-12-06
  • 2020-11-27
相关资源
最近更新 更多