# #node.js #google-cloud-firestore #firebase-admin
#node.js #google-облако-firestore #firebase-администратор
Вопрос:
Я думаю, что это неправильно, или я делаю это не очень хорошо, поэтому, когда я добавляю новый документ в коллекцию firestore, я могу использовать ссылку для получения идентификатора, но когда я передаю неправильное имя коллекции, я все равно получаю тот же ответ, почему firestore не выдает ошибку.
async function addDoc(collection, data) { try { const db = admin.firestore(); const ref = await db.collection(collection).doc() //add(data); ref.set(data); console.log("Document successfully added!", ref); } catch (err) { console.log("Error adding document: ", err); } }
я хочу знать, почему это так себя ведет и как определить, был ли создан новый документ. Спасибо
Комментарии:
1. iirc если вы добавите данные в коллекцию, которой не существует (т. е. «неправильное имя коллекции»), коллекция будет неявно создана
2. как это хороший вариант дизайна? я никогда не учил этому, и это отстой, зачем мне хотеть чего-то подобного?
Ответ №1:
Коллекции создаются по требованию, когда вы впервые пишете в них документ. Таким образом, то, что вы называете «неправильным именем коллекции», Firestore, скорее всего, интерпретирует это как инструкцию по созданию новой коллекции с таким именем.
Комментарии:
1. Привет, Фрэнк, но я думаю, что это шоу обычно выдает ошибку или что-то в этом роде, давая клиенту знать, что коллекция не существует, но она была создана. потому что как вы можете легко сделать это в приложении, не делая дополнительного вызова, чтобы проверить, завершается ли эта коллекция
2. Нет никакого способа сделать это без дополнительного звонка. Создание (или удаление) коллекции не считается соответствующей операцией (например, с вас не взимается плата за коллекции), поэтому для них нет событий. — Если вы хотите проверить, существует ли коллекция, вы обычно читаете ее содержимое с
limit(1)
помощью .3. @user15317824 если эти данные поступают от клиента, вам нужно будет проверить их перед передачей в базу данных, или вы открыты для атаки с использованием инъекций; для имени коллекции это может быть жестко закодированный массив «известных хороших» коллекций или 1-кратный вызов при запуске приложения для поиска имен коллекций, которые вы затем проверяете. Вероятно, вы также хотите проверить
data
, чтобы пользователь не мог загружать случайные/мегабайты данных