Я использую чат с помощью Firestore. Вот структура Firestore:
| - Чаты (коллекция)
| - AutoID (документ)
| --- user1ID (String)
| --- user2ID (String)
| --- поток (коллекция)
... и затем поток имеет дополнительные поля.
Чтобы получить чат между двумя пользователями, я извлекаю его как:
let db = Firestore.firestore().collection("Chats")
.whereField("user1ID", isEqualTo: Auth.auth().currentUser?.uid!)
.whereField("user2ID", isEqualTo: user2UID!)
Работает нормально, если пользователь 1 является текущим пользователем, в противном случае, если я открываю чат с другой учетной записи, а текущий пользователь является пользователем 2. Он не получает этот документ.
При поиске я обнаружил, что могупользователь arrayContains
. Поэтому вместо этого я создал массив с именем users
и добавил в него оба этих идентификатора. Теперь структура выглядит следующим образом: | - Чаты (коллекция)
| - AutoID (документ)
| --- users (Array)
| ---- 0: user1ID (String)
| ---- 1: user2ID (String)
| --- поток (коллекция)
... и затем поток имеет дополнительные поля.
Но когда я делаю:
let db2 = Firestore.firestore().collection("Chats")
.whereField("users", arrayContains: Auth.auth().currentUser?.uid!)
.whereField("users", arrayContains: user2UID!)
Будет получен первый найденный документ с currentUser.uid
(я не проверял его, я говорю это на основании прочитанной документации).
Итак, как мне получить этот чат, если массив содержит оба идентификатора?