繁体   English   中英

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

[英]firestore -- Add element in a field in hashmap

在此处输入图片说明

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

xyz@gmail.com displayName: "Anirudh Kumar" 角色: "admin"

我尝试了几件事,但似乎不起作用。

第一个选项

        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);

在此处输入图片说明

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

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

您的尝试均无效,因为您正在尝试使用值是Network.NetworkUser类型的对象的Map更新文档,这是不可能的,因为您无法将该对象映射到HashMap

什么是users财产? 实际上, 是Map类型的属性,它包含其他 HashMap 的术语。 所以你需要先获取文档,获取users属性的值,转换为Map<String, Object>并放入另一个HashMap 这个新的 HashMap 包含一个以电子邮件地址作为键和另一个HashMap作为值的对象,它同样包含具有两个值的两个键。 将所需数据添加到地图后,只需将文档写回即可。

如果您不希望出现这种行为,您可以简单地在每个 (Network.NetworkUser) 文档下创建一个用户子集合。

这对其他人可能很有用,正如 Alex 在上一篇文章中所说,问题的发生是因为 Firestore 不知道对象“NetworkUser”。 所以处理This的方法是将对象转换成Json String如下:

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

2.- 遍历旧的 Hashmap<String, Object>,并使用 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 可以是 <String, String> 或 Firestore 支持的任何其他原始对象。

如何将元素添加到 Object,List 的 hashmap<object><div id="text_translate"><p> 我有一个来自 dao 的列表,我想把这个列表放在一个 HashMap&gt; 中,我的列表可以包含一个服务,它有多个参数,比如 serviceId=3。 在我的最终 HashMap 中,结果如下所示: {Service 1=[100,A],Service 2=[101,A],Service 3=[Parameter[102,B],Parameter[103,B],Parameter[104,C]]} 。</p><pre> serviceId paramId type 1 100 A 2 101 A 3 102 B 3 103 B 3 104 C</pre><p> 服务.java</p><pre> private int id; //Getters+Setters</pre><p> 参数.java</p><pre> private int id; private String type; //Getters+Setters</pre><p> 测试.java</p><pre> List result = dao.getServiceParam(); HashMap&lt;Service,List&lt;Parameter&gt;&gt; mapList = new HashMap&lt;Service, List&lt;Parameter&gt;&gt;(); if(.result;isEmpty()) { for (int i=0. i&lt; result;size(). i++) { Object[] line = (Object[])result;get(i); if ((BigDecimal) line[0]!=null) { } } }</pre></div></object>

[英]How to add element to hashmap of Object,List<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在现有的HashMap中添加元素 如何在HashMap中将元素添加到ArrayList中 将最新字段值添加到HashMap的注释 当Set为Hashmap的值时,将元素添加到Set 如何将元素添加到 Object,List 的 hashmap<object><div id="text_translate"><p> 我有一个来自 dao 的列表,我想把这个列表放在一个 HashMap&gt; 中,我的列表可以包含一个服务,它有多个参数,比如 serviceId=3。 在我的最终 HashMap 中,结果如下所示: {Service 1=[100,A],Service 2=[101,A],Service 3=[Parameter[102,B],Parameter[103,B],Parameter[104,C]]} 。</p><pre> serviceId paramId type 1 100 A 2 101 A 3 102 B 3 103 B 3 104 C</pre><p> 服务.java</p><pre> private int id; //Getters+Setters</pre><p> 参数.java</p><pre> private int id; private String type; //Getters+Setters</pre><p> 测试.java</p><pre> List result = dao.getServiceParam(); HashMap&lt;Service,List&lt;Parameter&gt;&gt; mapList = new HashMap&lt;Service, List&lt;Parameter&gt;&gt;(); if(.result;isEmpty()) { for (int i=0. i&lt; result;size(). i++) { Object[] line = (Object[])result;get(i); if ((BigDecimal) line[0]!=null) { } } }</pre></div></object> 在HashMap中的HashMap中添加元素 在嵌套对象firestore Android中添加新字段 将布尔数组作为字段添加到Firestore文档 如何在 Firebase Firestore 中添加自动 uid 字段 Cloud Firestore:向文档添加字段值
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM