--- Users (Collection)
|
--- p0A1fXH4l2TpvGE2lo0x
|
--- List (HashMap)
|
--- ID (String) (Value: UQx4CWRgnVLOdKEY3AKJ)
--- NAME (String) (Value: ...)
Как в Firestore найти документы с идентификатором списка, равным UQx4CWRgnVLOdKEY3AKJ
? Прежде чем удалять список, мне нужно удалить его из пользователей, которые его использовали. Как я могу определить, какие документы используют этот идентификатор списка, чтобы я мог их удалить?
Похоже, что у вашего List (HashMap)
может быть несколько дочерних объектов, и вы хотите искать во всех них определенное значение идентификатора.
Невозможно выполнить поиск по всем объектам в поле карты в Firestore. Если вы хотите выполнить поиск по всем значениям идентификатора, добавьте дополнительное поле массива только с этими значениями, например.
ListIDs: ["UQx4CWRgnVLOdKEY3AKJ", ...]
Имея это поле, вы можете использовать оператор array-contains для запроса соответствующих документов.
Можно ли получить все документы, в которых идентификатор внутри поля списка равен определенному значению?
# 1) Нет. Вам нужно будет добавить поле массива верхнего уровня, как показано в моем ответе. # 2) Как только вы это сделаете, вы можете использовать условие членства в массиве, как показано в моем ответе.
Если я правильно понимаю, поле 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 часа и скажу вам, это упоминается в документах?
Я не уверен, упоминается ли этот конкретный тип запроса в документах.
Я сделаю ваш ответ исправленным, потому что он работает так, как я хочу, и я не уверен, почему Фрэнк ван Паффелен не сообщил мне об этом методе. Возможно, он неправильно меня понял. Спасибо, Алекс и Фрэнк.
Как насчет хэш-карты внутри массива? Если я хочу удалить изображение с именем файла 9OoISFCPlA9H0KDkG6yl
из хранилища Firebase, мне нужно сначала удалить его из документов, которые его используют. Вот структура данных в виде изображения. Возможно ли это? Если да, то как проще всего это сделать?
Я имею в виду, как лучше всего найти документы, в которых используется это изображение, и удалить его из массива?
Я думаю, что этот ответ и этот ресурс помогут. Если нет, задайте новый вопрос здесь, в StackOverflow, используя собственный MCVE, чтобы я и другие разработчики Firebase могли вам помочь.
Надеюсь, вы обновите свой ответ и объясните, как я могу это сделать. Мне не нужно создавать новый вопрос, так как проблема связана с этой. Я награжу вас наградой в 100 баллов. Спасибо, Алекс.
Вы не можете искать документы, в которых объект внутри массива содержит поле с определенным идентификатором. В этом случае следует использовать весь объект, а не частичные данные. Или используйте решение в ответе @FrankvanPuffelen.
Можно ли удалить поле «Список», если идентификатор внутри этого поля равен определенному идентификатору? Вот структура данных в виде изображения.