как отфильтровать запись по полю в документе коллекции firestore

# #flutter #google-cloud-firestore

Вопрос:

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

данные о пожаре

В симуляторе правил я могу поиграть с установленными идентификаторами, и это отлично работает. Однако, когда я тестирую приложение на телефоне, я получаю следующую ошибку:

 [Firestore]: Listen for Query(target=Query(reviews order by -stars, -  timestamp, -__name__);limitType=LIMIT_TO_FIRST) failed:  Status{code=PERMISSION_DENIED, description=Missing or insufficient  permissions., cause=null}  

Не все сообщения имеют «Идентификатор пользователя», так как не все сообщения будут скрыты пользователями. Мои правила firestore таковы:

 match /reviews/{review}{  allow read: if request.auth != null amp;amp; !(request.auth.uid in   resource.data.hidingUserId)  allow delete, update, create: if request.auth != null  }  

спасибо вам за помощь!

Ответ №1:

 String myID = FirebaseAuth.instance.currentUser.uid;  var idofotheruser = await FirebaseFirestore.instance  .collection('reviews')  .where('hidingUserId' arrayContains: myID ) //.get or .snapshot  .get();  

Комментарии:

1. спасибо, но у меня возникли проблемы с . где() и .OrderBy(). я упорядочиваю сообщения в соответствии со звездами, затем лайками, затем отметкой времени и звездами по убыванию. всякий раз, когда у меня есть .where (), я получаю ошибки, требующие, чтобы .OrderBy() был тем же полем. это было очень запутанно.

2. у вас не может возникнуть проблем с использованием where и упорядочением таким образом, поделитесь своим кодом… я верю, что вы используете doc() с where…

3. кроме того, массив не должен содержать идентификатор пользователя, так как пользователь скрыл сообщение, чтобы его не видеть, поэтому оно не должно отображаться на стене/экране пользователя..я этого не понимаю

4. прошу прощения! 🙂 пользователь скрывает сообщения, а идентификатор пользователя устанавливается в массиве ‘hidingUserId’. затем этот пользователь видит только сообщения, которые он/она не скрывал, другими словами, массив ‘hidingUserId’ не содержит его/ее идентификатор пользователя. если мы воспользуемся вашим предложением, то сообщения, скрытые пользователем, будут видны пользователю.

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