firestore - добавить элемент в поле в hashmap - PullRequest
1 голос
/ 06 января 2020

enter image description here

Выше приведена структура коллекции "сети". Что нужно сделать, это добавить еще один элемент в поле «пользователи». Это HashMap. Я хочу добиться, чтобы Key = xyz@gmail.com и его значения {displayName: "Anirudh Kumar", "role": "admin"}.

xyz@gmail.com displayName: "Anirudh Kumar" role: "admin"

Я пробовал несколько вещей, но это, похоже, не работает.

1-й вариант

        Map<String, Network.NetworkUser> users = new HashMap<>();
        users.put(email, networkUser);

       db.collection("networks").document("id")
          .update("users",FieldValue.arrayUnion(users));

2-й вариант

       db.collection("networks").document(userNetwork.getNetworkUid())
                                .set(users,SetOptions.merge());

3-й вариант

                            db.collection("networks").document(userNetwork.getNetworkUid())
                                .update("users."+email,networkUser);

enter image description here

3-й вариант приближает меня к ответу, но из-за точки [.] В электронном письме он создает другую строку, дайте мне знать если как-то этого можно избежать.

Если кто-нибудь может помочь мне, как я могу достичь желаемой цели, это будет оценено. Спасибо.

1 Ответ

2 голосов
/ 06 января 2020

Ни одна из ваших попыток не работает, потому что вы пытаетесь обновить документ, используя Map, в котором значение является объектом типа Network.NetworkUser, и это невозможно, поскольку вы не можете сопоставить этот объект с HashMap.

Что такое свойство users? Фактически, это свойство типа Map, которое содержит в терминах другие HashMaps. Поэтому вам нужно сначала получить документ, получить значение свойства users, привести к Map<String, Object> и поместить внутрь другого HashMap. Этот новый HashMap содержит объект с адресом электронной почты в качестве ключа и другим HashMap в качестве значения, который снова в терминах содержит два ключа с двумя значениями. После добавления нужных данных на карту просто запишите документ обратно.

Если вам не нужно такое поведение, вы можете просто создать подколлекцию пользователей в каждом документе (Network.NetworkUser).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...