Firestore SetOptions.mergeFields不存储字段

时间:2018-11-03 23:45:33

标签: java android firebase google-cloud-firestore

因此,我具有此功能,可以在用户成功注册后将其存储到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>

1 个答案:

答案 0 :(得分:1)

  

但是当我调用updateOrInsertUser(user)时,只有SetOptions中的字段才存储在Firestore中,因此不会存储ID。

这是正常现象,因为您没有将ID传递给SetOptions的mergeFields()方法。

  

是否存在一种简单的方法来覆盖SetOptions中定义的旧值(如果文档已经存在并且没有文档存储所有内容)?我不想在更新之前获取旧文档:(

最简单的方法是获取“旧”文档,更改其值并将其写回到数据库,但是还有另一种方法可以帮助您更改文档中的值,这是使用{{ 1}}和一个Map方法调用。在代码中,可能看起来像这样:

update()