代码之家  ›  专栏  ›  技术社区  ›  svkaka

firestore setoptions.mergefields不存储字段

  •  1
  • svkaka  · 技术社区  · 6 年前

    所以我有这个函数,在用户注册成功后,将其存储到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 未存储。

    是否有一种简单的方法覆盖在 设置选项 如果文档已经存在并且没有文档存储所有内容? 我不想在更新之前获取旧文档:(

    不,我不想补充 身份证件 进入之内 设置选项 (想象一下当您不想覆盖数据库中已经存在的字段时的其他用例)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alex Mamo    6 年前

    但是当我调用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);