#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"])
Здесь я должен получить первый объект в результате
Комментарии:
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] Можете ли вы, пожалуйста, помочь мне добиться этого?