在 GraphQL 解析器中对 MongoDB 数据进行排序 (Meteor/React/Apollo)

Sorting MongoDB data in GraphQL resolver (Meteor/React/Apollo)

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

在我的 Robo3T 控制台中,我可以 运行 database.find({}).sort({name:1}) 并且我可以看到实际排序的数据。根据 docs I thought it may have been due to the Node implementation,所以我尝试了 sort([["name",1]]),但这也没有用,我不太确定还有什么办法可以解决这个问题。

如果没有办法做到这一点 - 我应该只依靠客户端排序吗?条目不多,< 100,我想我应该在数据库本身中对其进行排序,因为我从不需要未排序的数据,而且它甚至可能不会发生太大变化。

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

谢谢!

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

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")

.find()returns一个游标:

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

我相信您看错了文档。如果这确实是流星,那么 Database 大概是 meteor collection,而不是原始的 mongo collection。 meteor collections 上的界面略有不同。在你的情况下,我想你想要:

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