只更新一个字段

我有一个数据库。序列是: 集合-文档-散列表。例如:

Users-集合的名称

Uid-文档的名称

文档的散列表由许多散列表用户数据组成 散列表 散列表 等等

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

我做错了什么?

82894 次浏览

当对文档调用 set()时,该文档的现有内容将被传入的数据替换。

如果只想更新映射中指定的字段的值,请使用 update():

mFirebaseFirestore
.collection("users")
.document(mFirebaseAuth.getUid())
.update(userMap)

请参阅关于 更新文件的 Firest 文档。

我知道这是一个几乎有一年历史的问题,但这可能会帮助某人。使用 点符号

db.collection("users")
.document("frank")
.update({
"age": 13,
"favorites.color": "Red"
});

动态嵌套引用:

def nest_update(new, parent):
return {parent+'.'+new: val for new, val in list(new.items())}

用法:

old = {'nested': {'a': 123,'b': 456, 'c': 789}}
new = {'b': 0}
    

print('\nOld:           ', old)
print('New:           ', nest_update(new, 'nested'))
print('New should be: ', {'nested.b': 0})




# OUTPUT
Old:            {'nested': {'a': 123, 'b': 456, 'c': 789}}
New:            {'nested.b': 0}
New should be:  {'nested.b': 0}

请注意,从2021年开始,如果使用 firebase-firest-ktx (请参阅文件) ,则 阿莱斯特先生的回答中的语法有所改变。我没有编辑答案,因为它可能仍然有效的人使用其他版本的库。

// 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"
))

我在一些答案中发现了一些奇怪的符号。也许火灾恢复参数被更新了?无论如何,我想发布一个我自己的答案。

如果要更新文档中的单个元素,请使用以下代码:

db.collection("users").document("frank")
.update("age", 13);

Update ()参数可以根据需要接受任意数量的键/值对,这些键/值对之间不用冒号分隔,也不会像这些答案中所示的那样放在某种数组符号{}中。它们只是用逗号加入和分隔。见下文:

. update (键、值、附加键、附加值)

在 update ()之后,可以根据需要随意添加 OnSuccess/Onfalse 侦听器。