Итак, у меня есть эта функция для сохранения пользователя в 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 (представьте себе другие варианты использования, когда вы не хотите переопределять поле, которое уже существует в базе данных)




But when I call updateOrInsertUser(user) only fields that are in SetOptions are stored in firestore, therefore id is not stored.
Это нормальное поведение, поскольку вы не передаете идентификатор методу SetOptions mergeFields().
Is there a simple way to override old values defined in SetOptions if the document already exists and if there is not doc store everything? I don't want to fetch old document before updating :(
Самый простой способ - получить «старый» документ, изменить его значения и записать его обратно в базу данных, но есть и другой подход, который может помочь вам изменить значения в документе, и это с помощью 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);
Привет, свкака! Если вы считаете, что мой ответ вам помог, примите его, нажав на галочку (✔️) слева под стрелками голосования. Должен поменять цвет на зеленый. Я бы оценил это. Спасибо!