firestore не возвращает никаких признаков того, что добавление нового документа было успешным или нет

# #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 , чтобы пользователь не мог загружать случайные/мегабайты данных