Как получить документы Firestore с определенным значением поля Hashmap?

--- Users (Collection)
    |
    --- p0A1fXH4l2TpvGE2lo0x
        |
        --- List (HashMap)
            |
            --- ID (String) (Value: UQx4CWRgnVLOdKEY3AKJ)
            --- NAME (String) (Value: ...)

Как в Firestore найти документы с идентификатором списка, равным UQx4CWRgnVLOdKEY3AKJ? Прежде чем удалять список, мне нужно удалить его из пользователей, которые его использовали. Как я могу определить, какие документы используют этот идентификатор списка, чтобы я мог их удалить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, что у вашего List (HashMap) может быть несколько дочерних объектов, и вы хотите искать во всех них определенное значение идентификатора.

Невозможно выполнить поиск по всем объектам в поле карты в Firestore. Если вы хотите выполнить поиск по всем значениям идентификатора, добавьте дополнительное поле массива только с этими значениями, например.

ListIDs: ["UQx4CWRgnVLOdKEY3AKJ", ...]

Имея это поле, вы можете использовать оператор array-contains для запроса соответствующих документов.

Можно ли удалить поле «Список», если идентификатор внутри этого поля равен определенному идентификатору? Вот структура данных в виде изображения.

Taha Sami 09.02.2023 17:11

Можно ли получить все документы, в которых идентификатор внутри поля списка равен определенному значению?

Taha Sami 09.02.2023 17:13

# 1) Нет. Вам нужно будет добавить поле массива верхнего уровня, как показано в моем ответе. # 2) Как только вы это сделаете, вы можете использовать условие членства в массиве, как показано в моем ответе.

Frank van Puffelen 09.02.2023 18:51
Ответ принят как подходящий

Если я правильно понимаю, поле List внутри пользовательского документа — это Map, которое содержит только строковые значения. Итак, если ваша схема базы данных выглядит именно так:

db
|
--- Users (collection)
     |
     --- $uid (document)
          |
          --- List (map) //👈
               |
               --- ID: "UQx4CWRgnVLOdKEY3AKJ"
               |
               --- NAME: "Taha Sami"

Чтобы получить всех пользователей, у которых поле ID в List содержит значение UQx4CWRgnVLOdKEY3AKJ, такой запрос поможет:

Query queryByListId = db.collection("Users").whereEqualTo("List.ID", "UQx4CWRgnVLOdKEY3AKJ");
//                                                            👆

Да, это то, что я хочу, я попробую через 2 часа и скажу вам, это упоминается в документах?

Taha Sami 10.02.2023 09:32

Я не уверен, упоминается ли этот конкретный тип запроса в документах.

Alex Mamo 10.02.2023 09:45

Я сделаю ваш ответ исправленным, потому что он работает так, как я хочу, и я не уверен, почему Фрэнк ван Паффелен не сообщил мне об этом методе. Возможно, он неправильно меня понял. Спасибо, Алекс и Фрэнк.

Taha Sami 10.02.2023 12:18

Как насчет хэш-карты внутри массива? Если я хочу удалить изображение с именем файла 9OoISFCPlA9H0KDkG6yl из хранилища Firebase, мне нужно сначала удалить его из документов, которые его используют. Вот структура данных в виде изображения. Возможно ли это? Если да, то как проще всего это сделать?

Taha Sami 11.02.2023 09:06

Я имею в виду, как лучше всего найти документы, в которых используется это изображение, и удалить его из массива?

Taha Sami 11.02.2023 09:07

Я думаю, что этот ответ и этот ресурс помогут. Если нет, задайте новый вопрос здесь, в StackOverflow, используя собственный MCVE, чтобы я и другие разработчики Firebase могли вам помочь.

Alex Mamo 11.02.2023 10:12

Надеюсь, вы обновите свой ответ и объясните, как я могу это сделать. Мне не нужно создавать новый вопрос, так как проблема связана с этой. Я награжу вас наградой в 100 баллов. Спасибо, Алекс.

Taha Sami 11.02.2023 10:49

Вы не можете искать документы, в которых объект внутри массива содержит поле с определенным идентификатором. В этом случае следует использовать весь объект, а не частичные данные. Или используйте решение в ответе @FrankvanPuffelen.

Alex Mamo 11.02.2023 14:36

Другие вопросы по теме

Похожие вопросы

Динамически добавлять строки в таблицу в JavaFX
Java Spring загружает несколько баз данных, репозиторий использует неправильную базу данных
Java 17 «выражение 'switch' не охватывает все возможные входные значения» не отображается, если нет возврата
Как кодировать и отправлять сообщение ISO 8583 с помощью ASCII и Hexa?
Измените текстовое представление во фрагменте на основе положительных/отрицательных кнопок DialogAlert в Android Java
Лучший способ проверить, является ли новое значение логическим предшественником текущего значения
Не удается найти задачи, соответствующие «spring-boot: run», поскольку проект «spring-boot» не найден в корневом проекте «demo»
Плюсы и минусы определения графа как вложенных узловых объектов по сравнению со словарем?
Изменить список объекта одного из свойств, если найдено более 1 записи в группе в списке с использованием java 8
Потоки Java: рассчитать длину пути, используя список координат, используя функции потока