Невозможно удалить / обновить элемент по указанному c индексу в массиве Firestore. Для получения дополнительной информации, пожалуйста, проверьте мой ответ из следующего сообщения:
Есть ли способ обновить указанный c индекс из массива в Firestore
В вашем конкретном случае свойство add_day
- это массив, содержащий объекты. Если вы хотите удалить элемент из этого массива, вам необходимо передать все значение объекта элемента. Он будет не , если вы просто передадите индекс или одно из вложенных значений в этот элемент.
Для вашего типа данных вам нужно будет построить Map
с точное содержимое вашего первого элемента и передайте этот объект методу update()
, как в следующих строках кода:
String email = FirebaseAuth.getInstance().getCurrentUser().getEmail();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference medicinDayRef = rootRef.collection("medicinday");
DocumentReference emailRef = medicinDayRef.document(email);
HashMap<String, Object> doc = new HashMap<>();
doc.put("day", "monday");
doc.put("king" , "A");
doc.put("nam" , "ren");
doc.put("time1" , "AM 7:30");
doc.put("time2" , "PM 2:30");
doc.put("time3" , "PM 8:30");
emailRef.update("add_day", FieldValue.arrayRemove(doc));
Имейте в виду, что если вы не знаете все содержимое элемента, он будет не работает.
Другой вариант может заключаться в том, чтобы прочитать документ, изменить список на клиенте, удалив элемент в первой позиции, записать его измененный список обратно в документ и в конец просто напишите его обратно в Firestore.
Более подробную информацию об этом топе c можно найти здесь:
Android Firestore запрашивает конкретное значение в массиве Объекты
И в следующей статье:
Как сопоставить массив объектов из Cloud Firestore со списком объектов?