所以我有这个函数可以在用户成功注册后将其存储到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
中(想象一下当您不想覆盖数据库中已经存在的字段时的其他用例(
但是当我调用updateOrInsertUser(user(时,只有SetOptions中的字段存储在firestore中,因此不存储id。
这是正常行为,因为您没有将id传递给SetOptions的mergeFields()
方法。
如果文档已经存在,并且没有文档存储所有内容,是否有一种简单的方法可以覆盖SetOptions中定义的旧值?我不想在更新之前获取旧文档:(
最简单的方法是获取"旧"文档,更改其值并将其写回数据库,但还有另一种方法可以帮助您更改文档中的值,那就是使用Map
和update()
方法调用。在代码中,可能看起来像这样:
Map<String, Object> user = new HashMap<>();
user.put("photoUrl", FIELD_photoUrl);
user.put("email", FIELD_email);
user.put("displayName", FIELD_displayName);
userDocumentReference.update(user);