В JSON и в большинстве языков программирования массив может содержать одно и то же значение несколько раз.
Но многие разработчики используют массивы для реализации математических наборов, которые представляют собой набор уникальных значений.Это означает, что в большинстве языков программирования вы выполняете эту операцию во многих местах.Например, в JavaScript:
if (!array.contains("my new value")) {
array.push("my new value");
}
Теперь у вас есть два оператора для выполнения одной операции, что приводит к состоянию гонки (особенно в многопользовательских сценариях).
По этой причине Cloud Firestoreдобавлена атомарная операция array-union
, которая добавляет элемент в массив, если его там еще нет.Эту операцию следует использовать, если вы хотите, чтобы в вашем массиве были уникальные значения.
Если вы не хотите, чтобы значения в вашем массиве были уникальными, вы должны использовать обычные операторы массива вашего языка программирования.В JavaScript это будет просто операция push()
, которую мы использовали выше, но без if
вокруг нее:
array.push("my new value");
Обновление на основе вашего примера кода.
gradesRef.get().then((doc) => {
let grades = doc.data()[grade_type] || [];
grades.push(grade);
gradesRef.update({
[grade_type]: grades
});
});
Итак:
- Получить существующий массив оценок из документа
- Добавить новый элемент в конец массива
- Записьобновленные оценки возвращаются в базу данных.