Я пытаюсь отсортировать некоторые данные, возвращаемые запросом в GraphQl. Я запускаю стек Meteor/React/Apollo/Graphql, и эта строка позволяет мне получить все данные в моей базе данных в преобразователе resolvers.js
: return database.find({})
Я хотел бы отсортировать их на стороне сервера по полю «имя» и в соответствии с к документам и всему остальному, что я смог найти в Интернете до сих пор, return database.find({}).sort({name:1})
должен был вырезать его, но на самом деле он ничего не возвращает, и я не могу понять, почему, ничего не отображается в моей консоли и никаких ошибок быть брошенным, и, следовательно, я считаю, что он просто нулевой или пустой.
В моей консоли Robo3T я могу запустить database.find({}).sort({name:1})
и увидеть, что данные на самом деле сортируются. Согласно документам я подумал, что это может быть связано с реализацией Node, и поэтому я попытался sort([["name",1]])
, но это тоже не сработало, и я не совсем уверен, как это сделать.
Если нет способа сделать это - должен ли я просто полагаться на сортировку на стороне клиента? Это не так много записей, < 100, и я думаю, что я должен просто отсортировать их в самой базе данных, потому что мне никогда не нужны несортированные данные, и, вероятно, они даже не сильно изменятся.
Я хотел бы спросить об этом, несмотря ни на что, даже если для этой конкретной ситуации достаточно просто отсортировать его один раз в моей базе данных, как бы я иначе поступил с сортировкой данных в распознавателе, потому что мне нужно было бы сделать это в других экземплярах?
Спасибо!
РЕДАКТИРОВАТЬ - это то, что у меня есть:
export default {
Query: {
test_query(obj, args, context) {
// Bottom line is output
console.info("test1");
console.info(Database.find({}).sort({name:1}));
// Bottom line is not output
console.info("test2");
return Database.find({});
},
}
EDIT2: моя база данных определяется как Database = new Mongo.Collection("db_name")
ах, родной.... ИДК, но лог поможет ;)
Не могли бы вы поделиться кодом, где Database
определяется и инициализируется? Это коллекция метеоритов?
.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.info(Database.find({}).toArray)
, он печатает undefined
. Я пробовал разные комбинации и порядок добавления .find(), .toArray, .sort()
все безрезультатно. Он печатает undefined
или выдает сообщения об ошибках, в которых говорится, что они не являются функциями. Пробовал toArray()
кстати - выдало ошибку: Database.find(...).toArray is not a function
. Пришлось убрать скобки.
Я считаю, что вы смотрите на неправильную документацию. Если это действительно метеор, то Database
предположительно коллекция метеоров, а не сырая коллекция монго. Интерфейс коллекции метеоров немного отличается. В вашем случае, я думаю, вы хотите:
Database.find({}, {sort: {name: 1}}).fetch();
Это было оно. Я объявил свою базу данных как Database = new Mongo.Collection("db_name")
, но не знал, что к ней относятся по-другому. Спасибо!
@xadm Да, я пытался войти перед возвратом, и ничего. Нет асинхронности/ожидания. Нужны ли они мне? Я обновил сообщение с большим количеством кода, чтобы поместить его в контекст.