Запрос Firebase — IN не работает в предложении where, получая пустой массив в качестве результата

#javascript #firebase #google-cloud-firestore

#javascript #firebase #google-cloud-firestore

Вопрос:

Когда я пытаюсь отфильтровать свои данные с помощью запроса IN, он не показывает мне результат, в результате я получаю пустой массив. Я попробовал то же самое в консоли firebase. Я также не получаю результата там.

Мои данные — messages/01fjubNOf8oYODitr1h6 На этом пути у меня есть ключи — имя, сообщение, участники

 {
  name: "Pawan arora",
  message: "test",
  participants: ["33", "127"]
},
{
  name: "TEST NAME",
  message: "not working",
  participants: ["114", "127"]
}
{
  name: "TEST DATA",
  message: "new",
  participants: ["114", "33"]
}
 

Я попытался в запросе отфильтровать данные, мой запрос

.collection("messages").where("participants", "in", ["33", "127"])

Здесь я должен получить первый объект в результате

Изображение базы данных Firebase

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

1. Взгляните на повторяющиеся ответы, которые in также действительны для. Ваш массив заполнен объектами.

2. @RenaudTarnec Может быть, есть какое-то недоразумение, чтобы увидеть мои данные в firebase, у меня есть данные, похожие на groups/01fjubNOf8oYODitr1h6 По этому пути, у меня есть ключи — имя, сообщение, участники Здесь, в коллекции групп, я хочу отфильтровать их по ключу участников

3. @RenaudTarneci отредактировал мой вопрос, пожалуйста, взгляните на это еще раз. кроме того, я не могу снова открыть его, не могли бы вы, пожалуйста, повторить его

4. Пожалуйста, поделитесь скриншотом вашей базы данных Firestore. Вопрос снова открыт.

5. @RenaudTarnec Я добавил ссылку на изображение в свой вопрос. пожалуйста, посмотрите i.stack.imgur.com/D0t94.png

Ответ №1:

Вместо этого вам нужно использовать array-contains-any operator при фильтрации массивов.

Попробуйте это:

 .collection("messages").where("participants", "array-contains-any", ["33", "127"])
 

Для получения подробной информации ознакомьтесь с этим сообщением в блоге .

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

1. На самом деле, мое требование состоит в том, чтобы получить, где сопоставляется конкретный идентификатор, а не где он содержит, например, у меня есть 3 сообщения с идентификаторами участников [33, 127] и [114, 127] и [33, 114], Если я применил фильтр с идентификатором 33, 127, тогда я должен только [33, 127] Может кто-нибудь, пожалуйста, помогите мне, какой фильтр я должен использовать сейчас

2. О, я вижу, в этом случае вы пробовали двойные скобки? Нравится .collection("messages").where("participants", "in", [["33", "127"]]) .

3. Спасибо 🙂 Вау!! Это работает для меня, но я должен изменить порядок своего массива при создании и получении коллекции. Не могли бы вы сказать мне одну вещь, задокументировано ли это где-нибудь? Потому что я не нахожу этот метод нигде в документах

4. Я имею в виду, что он просто ищет не строковые объекты, а массивы. В документации строки приведены только для примера, я полагаю, что вы можете фильтровать по любому типу объекта.

5. Привет, @Emil Gi с вашим вышеупомянутым решением с двумя скобками, у меня возникла проблема еще в одном сценарии. Например, у меня есть 4 сообщения с идентификаторами участников [33, 127] и [114, 127] и [33, 114, 127] и [33, 114], Если я применил фильтр с идентификатором 33, 127, тогда я должен получить два результата здесь [33, 127], [33,114, 127] но я получаю только один здесь [33, 127] Можете ли вы, пожалуйста, помочь мне добиться этого?