# #javascript #firebase #google-cloud-firestore
Вопрос:
Эй, я только что обновил свой проект, чтобы использовать модульную версию Firebase 9. Теперь, после рефакторинга кода, мне интересно, как получить желаемый результат:
есть документ, в котором есть пара обязательных полей (скажем, имя, фамилия). Теперь я хочу добавить/обновить этот документ, но в нем есть несколько полей, которые не требуются.
Каковы наилучшие методы для достижения этой цели? Для условного добавления/обновления [1] или для использования «ignoreUndefinedProperties» [2]?
[1] условное добавление/обновление…
if(address){
await updateDoc(
doc(db, collection, id), {
name,
lastName,
address,
})
} else {
await updateDoc(
doc(db, collection, id), {
name,
lastName,
})
}
[2] Игнорируйте определенные свойства…
Также я не смог найти документацию о том, как использовать «ignoreUndefinedProperties» в новой версии, чтобы кто-нибудь мог подсказать мне правильное использование.
РЕДАКТИРОВАТЬ (Также является ли это (добавление РЕДАКТИРОВАНИЯ) лучшим способом продолжить и уточнить мой вопрос? Я новичок, поэтому я также ищу лучшие практики StackOverflow)
Я тестирую требуемые значения, но как мне поступить со значениями, которые не требуются?
У меня есть несколько коллекций и 20 вызовов к ним, и во многих требуется только 2-4 значения, в то время как может быть 20 неиспользованных значений.
Таким образом, я получаю следующую ошибку, если какое-либо из этих неиспользованных значений не определено и находится в updateDoc()…
Function updateDoc() called with invalid data. Unsupported field value: undefined (found in field exampleNotRequiredValue in document ...)
Так что для этого случая лучше ли
[1] проверьте, не являются ли значения неопределенными, и в этом случае добавьте их в объект обновления
[2] используйте свойства ignoreUndefinedProperties (так как не в этом ли смысл этого параметра, не выполняется ли эта проверка автоматически, и мне не нужно изменять многие функции?)
Ответ №1:
"ignoreUndefinedProperties"
возможно, это не лучший вариант. Если имя требуется, но не определено по какой-либо причине, то оно не будет записано в документ. Вы можете написать правила безопасности, которые проверят наличие name
полей и nickname
, но лучше всего будет условно добавить поля в объект обновления и убедиться, что необходимые поля присутствуют.
В случае , если вы хотите использовать ignoreUndefinedProperties
, вам придется использовать initializeFirestore
вместо getFirestore
:
import { initializeFirestore } from "firebase/firestore"
const db = initializeFirestore(app, {ignoreUndefinedProperties: true})
Комментарии:
1. Почему лучше добавлять поля условно для обновления объекта, чем просто использовать свойства ignoreUndefinedProperties, потому что параметр игнорировать автоматически не уменьшает код, необходимый для написания?
2. @Hessuew Я уже объяснял это в ответе. Если требуемое » имя » по какой-либо причине не определено, оно не будет добавлено в документ. Таким образом, технически это не обязательное поле, если вы не добавите проверку того, что оно определено, то использование
ignoreUndefinedProperties
не должно быть проблемой.3. Ах, вы правы, я задал неправильный вопрос (конечно, обязательные поля должны быть проверены, они присутствуют и имеют значение). Я добавлю прямой вопрос к своему исходному вопросу в качестве редактирования, чтобы указать, что я имею в виду