@Parziphal, я ожидаю хронологически случайный порядок при сортировке по идентификатору.

у получить данные из моей базы данных Firestore по заказуdocumentId в порядке убывания. Когда я звоню:

firestore.collection("users")
    .orderBy(FieldPath.documentId(), Query.Direction.DESCENDING)
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {...});

Я получаю ошибку:

FAILED_PRECONDITION: для запроса требуется индекс.

Со ссылкой на консоль Firebase для автоматического создания индекса. К сожалению, автоматическое создание не работает в этом случае. Когда я нажимаю кнопку Создать индекс, я получаю сообщение:

__name__ только индексы не поддерживаются

Для создания индекса вручнуюдоктор говорит только об индексации по имени поля (неdocumentId). Кто-нибудь знает, как получить данные из Firestore по заказуdocumentId в порядке убывания?

Я знаю, что могу переупорядочить данные на стороне клиента, но упорядочение по идентификатору является такой естественной задачей, что я должен что-то упустить. Спасибо. Я использую:

compile 'com.google.firebase:firebase-firestore:11.6.0'
 Artificioo22 нояб. 2017 г., 16:44
Можете ли вы поделиться своими "правилами" JSON? Может быть, вам нужно что-то вроде: '".indexOn": ["documentId"]'
 zelig7423 нояб. 2017 г., 14:23
Во время тестирования у меня есть доступ к Firestore по умолчанию, то есть разрешить чтение, запись для всех. @NicoT .: пожалуйста, вы бы отправили ссылку на документ?
 zelig7425 нояб. 2017 г., 14:49
@NicoT. Спасибо, но это документ для базы данных в реальном времени, а не для Cloud Firestore.
 Artificioo24 нояб. 2017 г., 14:00
 phonemyatt22 нояб. 2017 г., 16:27
как насчет доступа для чтения в FireStore?

Ответы на вопрос(1)

ВотCloud Firestore не обеспечивает автоматическое упорядочение автоматически сгенерированных docID.

Важное замечание: В отличие от «push-идентификаторов» в базе данных Firebase Realtime, автоматически генерируемые идентификаторы Cloud Firestore не обеспечивают никакого автоматического упорядочения. Если вы хотите иметь возможность упорядочить свои документы по дате создания, вы должны сохранить метку времени в качестве поля в документах.

Следовательно, вы можете добиться порядка, добавив дополнительное полеДата создания и просто установить его саннотирование @ServerTimestamp, объявив его перед полем класса в вашем пользовательском POJO следующим образом.

@ServerTimestamp
Date createdDate;

Также вы должны убедиться, что это поле пустое, когда POJO записывается в Firestore, не устанавливайте его значение перед сохранением в Firestore.

 Eugene Griaznov16 нояб. 2018 г., 03:19
@Parziphal, я ожидаю хронологически случайный порядок при сортировке по идентификатору.
 Parziphal14 нояб. 2018 г., 22:35
@EugeneGriaznov Желание сделать заказ по идентификатору zelig74 не говорит вам, что он хочет хронологическую сортировку? Какой порядок вы ожидаете при сортировке по идентификатору?
 Eugene Griaznov19 авг. 2018 г., 15:22
Почему вы говорите о дате создания? Автор вопроса не сказал о хронологической сортировке своих документов.
 zelig7423 нояб. 2017 г., 16:26
Причина, по которой Firestore не заказывает автоматически сгенерированные идентификаторы, привела меня к ручному вызову .orderBy (...). Проблема в том, что для упорядочения требуется индекс, который я не знаю, как создать по идентификатору.
 Dhara Bhavsar27 нояб. 2017 г., 17:44
Если я правильно понимаю ваш запрос, вы все равно хотите добавить автоматически сгенерированный идентификатор Firestore ID в качестве индекса, чтобы упорядочить результат на его основе. Естьдва вещи здесь: 1.) Команда Firebase советует вообще не использовать автоматически сгенерированный ID для упорядочивания результатов запроса, так как они не обеспечивают автоматическое упорядочение, такое как RTDB push ID. 2.) Вы можете создавать поля документа только в качестве индекса запроса, а идентификатор не является частью документа. Также по умолчанию каждое поле документа индексируется. Следовательно, они советуют добавить дополнительное полеcreateDate как указано выше, чтобы упорядочить результат запроса на основе даты создания документа.

Ваш ответ на вопрос