Сортировка данных MongoDB в преобразователе GraphQL (Meteor/React/Apollo)

Я пытаюсь отсортировать некоторые данные, возвращаемые запросом в 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")

@xadm Да, я пытался войти перед возвратом, и ничего. Нет асинхронности/ожидания. Нужны ли они мне? Я обновил сообщение с большим количеством кода, чтобы поместить его в контекст.

Ajay Pillay 18.12.2020 11:03

ах, родной.... ИДК, но лог поможет ;)

xadm 18.12.2020 11:18

Не могли бы вы поделиться кодом, где Database определяется и инициализируется? Это коллекция метеоритов?

Christian Fritz 18.12.2020 18:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
3
498
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.info(Database.find({}).toArray), он печатает undefined. Я пробовал разные комбинации и порядок добавления .find(), .toArray, .sort() все безрезультатно. Он печатает undefined или выдает сообщения об ошибках, в которых говорится, что они не являются функциями. Пробовал toArray() кстати - выдало ошибку: Database.find(...).toArray is not a function. Пришлось убрать скобки.

Ajay Pillay 18.12.2020 17:37
Ответ принят как подходящий

Я считаю, что вы смотрите на неправильную документацию. Если это действительно метеор, то Database предположительно коллекция метеоров, а не сырая коллекция монго. Интерфейс коллекции метеоров немного отличается. В вашем случае, я думаю, вы хотите:

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

Это было оно. Я объявил свою базу данных как Database = new Mongo.Collection("db_name"), но не знал, что к ней относятся по-другому. Спасибо!

Ajay Pillay 18.12.2020 21:44

Другие вопросы по теме