Firestore 更新只有一个字段
Firestore 更新只有一个字段
我有一个数据库。顺序是:集合 - 文档 - 哈希映射。例如:\nusers - 集合的名称\nusers.uid - 文档的名称\n哈希映射 - 文档包含许多哈希映射的用户数据\n哈希映射\n哈希映射\n等等\n哈希映射:用户名是键,电话、位置等是值。我只需要更新一个用户名的一个字段(位置),但是不知道该如何做?\n我尝试了以下方式(更新Alex的电话号码):\n
User user = new User(); user.setPhone(131902331); MapuserMap = new HashMap<>(); userMap.put("alex",user); mFirebaseFirestore .collection("users") .document(mFirebaseAuth.getUid()) .set(userMap, SetOptions.merge()) .addOnSuccessListener(new OnSuccessListener () { @Override public void onSuccess(Void aVoid) { LOG.info("Success"); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { LOG.error("Failure "+e.toString()); } });
\n我做错了什么?
Firestore update only one field的问题出现的原因是使用firebase-firestore-ktx库的更新语法发生了变化。根据MrAleister的回答中的链接所示的文档,可以看到更新操作的语法已经改变了。
解决这个问题的方法是使用新的更新语法。在上述代码中,可以看到使用了`update`方法来更新文档中的字段。通过传递一个包含要更新字段的映射(map),可以只更新指定的字段。在这个例子中,使用了`mapOf`方法来创建一个映射,其中包含要更新的字段和对应的新值。
在这个例子中,要更新的字段是`age`和`favorites.color`。`age`字段的新值为13,`favorites.color`字段的新值为"Red"。通过将这个映射传递给`update`方法,可以实现只更新指定字段的操作。
需要注意的是,这个解决方法适用于使用firebase-firestore-ktx库的版本。对于其他版本的库,可能需要使用不同的语法来实现只更新一个字段的操作。
总结起来,解决Firestore只更新一个字段的问题的方法是使用新的更新语法,通过传递一个包含要更新字段和对应新值的映射来实现。
问题的原因是在使用Firestore的update方法时,传入了一个HashMap对象,而该HashMap的值包含了RealmObject对象。由于Firestore需要的数据结构不同于Firebase,因此在使用update方法时出现了错误。
解决方法是创建一个新的数据结构,该数据结构适用于Firestore的update方法。这个新的数据结构可能会有一些冗余,但可以确保update方法正常工作。
具体来说,可以通过以下步骤解决问题:
1. 创建一个新的数据结构,该数据结构中的值不包含RealmObject对象。
2. 使用set方法将新的数据结构传入Firestore的document中,以替换原有的数据。
3. 在需要更新字段的地方,使用update方法,传入新的数据结构。
以下是示例代码:
mFirebaseFirestore .collection("users") .document(mFirebaseAuth.getUid()) .set(newUserMap); mFirebaseFirestore .collection("users") .document(mFirebaseAuth.getUid()) .update(userMap);
需要注意的是,update方法只会更新指定字段的值,而不会替换整个文档的内容。
希望以上解决方法能帮助到你解决Firestore update只更新一个字段的问题。如果你还有其他关于Firestore和RealmObject的问题,可以在相关的Stack Overflow页面中寻找答案。
问题出现的原因:在Firestore中更新一个字段时,可能会遇到无法更新该字段的问题。
解决方法:使用点表示法(dot notation)来更新嵌套对象中的字段。
在Java中使用该语法时,需要创建一个包含要更新的数据的Map对象,并将其传递给`update`方法。
以下是代码示例:
Mapdata = new HashMap<>(); data.put("age", 13); data.put("favorites.color", "Red"); db.collection("users") .document("frank") .update(data);
这样就可以更新`users`集合中名为`frank`的文档中的`age`字段和`favorites`对象中的`color`字段。
需要注意的是,如果`favorites`对象不存在,则会创建一个新的字段,其键为"favorites.color";如果`favorites`对象已存在,则会更新该对象中的`color`字段。