Использование addSnapshotListener с WhereArrayContains Firebase - PullRequest
0 голосов
/ 12 октября 2019

У меня есть база данных, которая выглядит следующим образом:

enter image description here

Внутри "Чатов" есть документы с именем, которое составлено из комбинации 2идентификаторы пользователей. Внутри этого документа есть поле с именем «Имя», которое совпадает с именем этого документа.

Я пытаюсь добавитьSnapshotListener следующим образом:

public void getRooms(EventListener<QuerySnapshot> listener) {
    db.collection( "Chats" ).
            whereArrayContains( "Name", auth.getUid()).addSnapshotListener( listener );

}

Что я хотел, чтобы этот код сделал, чтобынайти все документы, которые внутри своего поля «Имя», строка содержит идентификатор пользователя где-то внутри строки.

Например, если есть документ с именем: abcdegf и auth.getUid() = abcd Я хочу, чтобы он нашелдокумент. Или, если документ называется egfabcd, я все еще хочу, чтобы он его нашел.

По какой-то причине он не находит никакого документа, даже если я знаю, что есть документ, который соответствует запросу.

Есть что-то, что я делаю не так с whereArrayContains?

Спасибо

1 Ответ

0 голосов
/ 12 октября 2019

Операция whereArrayContains действительна только для полей, которые являются массивом значений. Ваше поле Name содержит одно строковое значение, поэтому whereArrayContains не будет работать с этим полем.

В Firestore нет операции для проверки, содержит ли определенное строковое поле значение. Наиболее близким эквивалентом является то, что вы можете проверить, начинается ли определенное поле с определенного значения.

Если вам нужна действительная операция , содержащая , вам придетсяиспользовать другую / дополнительную базу данных для поиска. Например, см. Документацию Firestore на с использованием внешнего полнотекстового поискового движка .

Но в этом случае, почему бы вам просто не сохранить UID в поле массива, вместообъединить их в одну строку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...