firestore-在哈希图中的字段中添加元素

时间:2020-01-06 11:12:11

标签: java android firebase google-cloud-firestore

enter image description here

以上是集合“网络”的结构。要做的是在“用户”字段中添加另一个元素。这是HashMap。我要实现的是Key = xyz@gmail.com及其值{displayName:“ Anirudh Kumar”,“ role”:“ admin”}。

xyz@gmail.com displayName:“ Anirudh Kumar” 角色:“管理员”

我尝试了几件事,但是似乎没有用。

第一个选项

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

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

第二个选项

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

第三个选项

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

enter image description here

第三个选项使我更接近答案,但是由于电子邮件中的点[。]会创建另一行,请让我知道是否可以避免这种情况。

如果有人可以帮助我如何实现期望的目标,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

这对其他人可能很有用,正如Alex在上一篇文章中所说,由于Firestore不知道对象“ NetworkUser”,因此出现了问题。因此,一种处理方法是将对象转换为Json字符串,如下所示:

1.--在插入之前,创建一个新的Hashmap

2.-遍历旧的Hashmap ,然后使用Gson(或其他方法)执行:

        val gson = Gson()
        for ((key, user) in my_old_hashmap) {
            val user  = gson.toJson(user)
            my_new_hashmap[key] = user
        }

3.-插入任何结构时,继续插入到Firestore中。

4.-然后,使用gson再次将其转换为“您的结构”:

for ((key, user_string) in my_new_hashmap) {
      val user  = gson.fromJson(user_string, My_Object_Any::class.java)
       my_old_hashMap[key] = user
        }

TL; DR:Firestore不知道您的结构,因此要插入的HashMap可以是或Firestore支持的任何其他原始对象。