因此,我具有此功能,可以在用户成功注册后将其存储到Firestore中。
//User class
id: String
email: String?
displayName: String?
photoUrl: String?
//updateOrInsertUser method
collectionReference.document(user.id)
.set(
user,
SetOptions.mergeFields(
FIELD_photoUrl,
FIELD_email,
FIELD_displayName
)
)
但是,当我呼叫updateOrInsertUser(user)
时,只有SetOptions
中的字段存储在Firestore中,因此id
未存储。
是否存在一种简单的方法来覆盖在 SetOptions
中定义的旧值?如果文档已经存在并且没有文档存储所有内容,那么
我不想在更新之前获取旧文档:(
否,我不想将id
添加到SetOptions
中(想象其他用例,当您不想覆盖数据库中已经存在的字段时) < / p>
答案 0 :(得分:1)
但是当我调用updateOrInsertUser(user)时,只有SetOptions中的字段才存储在Firestore中,因此不会存储ID。
这是正常现象,因为您没有将ID传递给SetOptions的mergeFields()
方法。
是否存在一种简单的方法来覆盖SetOptions中定义的旧值(如果文档已经存在并且没有文档存储所有内容)?我不想在更新之前获取旧文档:(
最简单的方法是获取“旧”文档,更改其值并将其写回到数据库,但是还有另一种方法可以帮助您更改文档中的值,这是使用{{ 1}}和一个Map
方法调用。在代码中,可能看起来像这样:
update()