Как получить доступ к индексу массива Cloud Firestore, используя запрос во Flutter? - PullRequest
2 голосов
/ 15 марта 2019

У меня есть поле users в документе, и это поле содержит два элемента в массиве. Я должен проверить конкретные два значения в этом массиве.

Сначала я дважды использовал для этого метод array-contains, но произошла ошибка.

Как получить доступ к индексу поля массива в Cloud Firestore?

Ниже приведен код моего подхода, и он не работает:

QuerySnapshot querySnapshot = await sl.get<FirebaseAPI>().getFirestore()
      .collection('messages')
      .where('users'[0],isEqualTo: 'user1ID')
      .where('users'[1],isEqualTo: 'user2ID')
      .getDocuments();

простая конструкция пожарного депо

1 Ответ

1 голос
/ 15 марта 2019

Firestore не может использоваться для запроса базы данных на основе индекса элемента, существующего в массиве.Это правда, что вы не можете связывать более одного array-contains вызовов в запросе, но есть другой обходной путь, который может помочь вам достичь того же.Поэтому необходимо изменить структуру вашей базы данных.Поэтому вместо использования массива вы можете использовать карту, и ваша схема должна выглядеть примерно так:

Firestore-root
   |
   --- messages (collection)
         |
         --- users (map)
              |
              --- user1ID: true
              |
              --- user2ID: true

Теперь такой запрос будет отлично работать:

QuerySnapshot querySnapshot = await sl.get<FirebaseAPI>().getFirestore()
    .collection('messages')
    .where('users.user1ID',isEqualTo: true)
    .where('users.user2ID',isEqualTo: true)
    .getDocuments();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...