在 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();
我正在尝试对 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();