Del*_*ian 20 android firebase google-cloud-firestore
我有一个数据库.序列是:collections - document - hashmaps.例如:
users - 集合的名称
users.uid - 文档的名称
Hashmap文档由很多hashmaps用户数据Hashmap Hashmap等组成
Hashmap:用户名是密钥,电话,位置等是值.我只需要为一个用户名更新一个字段(位置),但无法理解这是怎么做到的?
我尝试了下一个方法(更新alex的电话号码):
User user = new User();
user.setPhone(131902331);
Map<String,RealmObject> userMap = new HashMap<>();
userMap.put("alex",user);
mFirebaseFirestore
.collection("users")
.document(mFirebaseAuth.getUid())
.set(userMap, SetOptions.merge())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
LOG.info("Success");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
LOG.error("Failure "+e.toString());
}
});
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
Fra*_*len 27
当您调用set()文档时,该文档的现有内容将替换为您传入的数据.
如果只想更新在地图中指定的字段的值,请使用update():
mFirebaseFirestore
.collection("users")
.document(mFirebaseAuth.getUid())
.update(userMap)
Run Code Online (Sandbox Code Playgroud)
小智 16
我知道这是一个将近一年的问题,但这可能会对某人有所帮助。使用点符号
db.collection("users")
.document("frank")
.update({
"age": 13,
"favorites.color": "Red"
});
Run Code Online (Sandbox Code Playgroud)
我在其中一些答案中发现了一些奇怪的符号。也许 firestore 参数已更新?无论如何,我想发布我自己的答案。
如果您想更新文档中的单个元素,请使用以下代码执行此操作:
db.collection("users").document("frank")
.update("age", 13);
Run Code Online (Sandbox Code Playgroud)
update() 参数接受您需要的任意数量的键/值对,这些键/值对不以冒号分隔,并且不放入某种数组符号 { } 中,如其中一些答案所示。它们只需添加并用逗号分隔即可。见下文:
.update( 键 , 值 , 附加键, 附加值)
update() 之后,请随意根据需要添加 OnSuccess/OnFailure 侦听器。
请注意,从 2021 年开始,如果使用 firebase-firestore-ktx(请参阅文档),MrAleister 的答案中的语法会发生一些变化。我没有编辑答案,因为它可能对使用其他版本库的人仍然有效。
// Assume the document contains:
// {
// name: "Frank",
// favorites: { food: "Pizza", color: "Blue", subject: "recess" }
// age: 12
// }
//
// To update age and favorite color:
db.collection("users").document("frank")
.update(mapOf(
"age" to 13,
"favorites.color" to "Red"
))
Run Code Online (Sandbox Code Playgroud)