以上是集合“网络”的结构。要做的是在“用户”字段中添加另一个元素。这是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);
第三个选项使我更接近答案,但是由于电子邮件中的点[。]会创建另一行,请让我知道是否可以避免这种情况。
如果有人可以帮助我如何实现期望的目标,将不胜感激。谢谢。
答案 0 :(得分:0)
这对其他人可能很有用,正如Alex在上一篇文章中所说,由于Firestore不知道对象“ NetworkUser”,因此出现了问题。因此,一种处理方法是将对象转换为Json字符串,如下所示:
1.--在插入之前,创建一个新的Hashmap
2.-遍历旧的Hashmap
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可以是