# #firebase #flutter #google-cloud-firestore
Вопрос:
Я пытался сохранить карту данных с помощью метода set, но каждый раз она перезаписывает данные в firebase. При настройке метода обновления эта же карта данных работает, она не перезаписывается, а создает новый массив и сохраняет его.
Я хочу сохранить данные для ввода местоположения в этом формате. Как я могу добиться этого с помощью метода set, а не с помощью метода обновления, поскольку метод обновления требует, чтобы коллекция и документ уже существовали, но в моем случае они будут автоматически созданы на основе идентификатора пользователя, вошедшего в систему.
Вот мой код для карты и отправки данных на firebase.
uploadLoacationEntryData(
locationName, fullAddress, visitTime, visitDate, entryDate) async {
Map<String, dynamic> locationMap = {
"locationName": locationName,
"fullAddress": fullAddress,
"visitTime": visitTime,
"visitDate": visitDate,
"entryDate": entryDate,
};
//await _locationEntryDA.setUserLocationEntry(locationMap);
await _locationEntryDA.updateUserLocationEntry(locationMap);}
Future setUserLocationEntry(locationMap) async {
return await _firestore
.collection("LocationEntry")
.doc(_auth.currentUser.uid)
.set({
"locationEntry": FieldValue.arrayUnion([locationMap])
});}
Future updateUserLocationEntry(locationMap) async {
return await _firestore
.collection("LocationEntry")
.doc(_auth.currentUser.uid)
.update({
"locationEntry": FieldValue.arrayUnion([locationMap])
});}
Ответ №1:
Похоже, вы ищете операцию набора и слияния, которая в Flutter будет выглядеть так:
docRef.set(
{ "locationEntry": FieldValue.arrayUnion([locationMap])},
SetOptions(merge : true)
)
Комментарии:
1. Он объединяет указанные вами новые значения полей с любыми существующими полями. Таким образом , он по сути делает то же самое, что и an
update()
, но с его помощьюset()
также будет создан документ, если он не существует (что, я думаю, то, о чем вы просили). Вы уже пробовали код? Если это не сделало того, чего вы хотели, можете ли вы показать, что вы сделали, что произошло и чего вы ожидали?2. Спасибо вам за ваш ответ! Это сработало успешно.
3. И да, также спасибо вам за ваше объяснение, это то, чего я хотел!