Firestore SetOptions.mergeFields не хранит поле - PullRequest
0 голосов
/ 04 ноября 2018

Итак, у меня есть эта функция для сохранения пользователя в 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), в Firestore хранятся только поля, которые находятся в SetOptions, поэтому id не сохраняется.

Есть ли простой способ переопределить старые значения, определенные в SetOptions , если документ уже существует, и если в нем нет документов для хранения всего? Я не хочу получать старый документ перед обновлением: (

Нет, я не хочу добавлять id в SetOptions (представьте себе другие случаи использования, когда вы не хотите переопределять поле, которое уже существует в базе данных)

1 Ответ

0 голосов
/ 04 ноября 2018

Но когда я вызываю updateOrInsertUser (user), в firestore сохраняются только те поля, которые находятся в SetOptions, поэтому 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...