Сортировать Firestore документов по определенной пользователем иерархии? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть база данных Firestore, и в ней есть несколько документов, включая поле для «позиции». Это поле «должность» может принимать значения «старший преподаватель», «начальник отдела», «преподаватель».

Я хочу отсортировать эту коллекцию так, чтобы документы, содержащие «начальника отдела» в качестве должности, должнынаверх, документы, содержащие «старшего лектора» в качестве позиции, должны идти дальше, и документы, содержащие «лектора» в качестве позиции, должны доходить до дна.

Я не могу просто отсортировать это по алфавиту. ("H", "S", "L")

Как мне это сделать в Firestore?

Ответы [ 2 ]

3 голосов
/ 14 октября 2019

Если подход Рено (добавление явного поля с порядком сортировки) не работает для вашего варианта использования, я бы обычно ставил префикс существующих значений поля position с порядком сортировки. Чтобы они стали:

"1 - Head of department"
"2 - Senior Lecturer"
"3 - Lecturer"

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

РЕДАКТИРОВАТЬ По Jay

Единственная потенциальная проблемав приведенном выше случае, если было добавлено больше позиций, например, позиция 10 - Ассистент помощника будет сортироваться после 1 - начальник отдела . Это НЕ проблема, если у вас есть только 10 уровней позиции (0-9)

Это можно исправить, заполнив позиции таким образом, чтобы все они имели одинаковое количество цифр;

001 - Head of Dept
002 - Senior Lecturer
.
.
.
010 - Assistant's Assistant
3 голосов
/ 14 октября 2019

Одним из решений было бы создание дополнительного поля, предназначенного для вашей конкретной сортировки, которое вы бы назвали, например, positionSorting.

В мире баз данных NoSQL не стесняйтесь добавлять новые поля, чтобы упростить ваши запросы (или сделать их возможными).

Так, например, это поле будет иметь значение1 если вы сохраните документ с Head of department в качестве значения позиции, 2, если это Senior lecturer и т. Д.

Тогда вы просто запросите свою коллекцию следующим образом:

users.orderBy("positionSorting").get()
  .then(function(querySnapshot) {
     querySnapshot.forEach(function(doc) {
        console.log(doc.id, " => ", doc.data());
     });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...