Как установить несколько данных в виде массива в Firestore

# #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. И да, также спасибо вам за ваше объяснение, это то, чего я хотел!