Firestore SetOptions.mergeFields 不存储字段



所以我有这个函数可以在用户成功注册后将其存储到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中定义的旧值?我不想在更新之前获取旧文档:(

最简单的方法是获取"旧"文档,更改其值并将其写回数据库,但还有另一种方法可以帮助您更改文档中的值,那就是使用Mapupdate()方法调用。在代码中,可能看起来像这样:

Map<String, Object> user = new HashMap<>();
user.put("photoUrl", FIELD_photoUrl);
user.put("email", FIELD_email);
user.put("displayName", FIELD_displayName);
userDocumentReference.update(user);

最新更新