Существует ряд проблем с вашим кодом, поскольку вы показали его, которые могут вызвать проблемы чтения и записи с базой данных Firestore.
Похоже, вы пытаетесь найти существующую коллекцию для записисо строкой
const dialogflowAgentRef = db.collection('dialogflow').doc('agent').where('title', '==', title);
, но title
нигде не определено, что, как я подозреваю, вызывает ошибку.Кроме того, doc()
возвращает DocumentReference , но в DocumentReference нет метода where()
.
Помните, что вам необходимо структурировать Firestore, используя чередующиеся коллекции и документы.Таким образом, ваша коллекция «firebase» может содержать документ с именем «agent», и этот документ может иметь вложенные коллекции.
Когда вы пытаетесь читать с помощью
const dialogflowAgentDoc = db.collection('dialogflow/agent/rss/channel/item');
Вы получаетеколлекции, но затем пытаюсь рассматривать это как документ.Комментарий предполагает, что вы пытаетесь прочитать конкретный документ из этой коллекции (что имеет смысл), но вы загружаете этот документ с помощью жестко закодированной строки «агент», а не пытаетесь получить агент из переданных параметровВам из Dialogflow.
Наконец - пути в разделах чтения и записи не совпадают.Использование жестко закодированных путей - это хорошо при тестировании, но убедитесь, что вы используете совпадающие пути и что они соответствуют требованию пути сбора / doc / collection / doc / ....
Итак, в обоих случаях выможет иметь ссылку, которая выглядит примерно так:
const docTitle = agent.parameters.title;
const docRef = db.collection('dialogflow').doc(title);
, которая, если вы определили параметр "title" в ваших Intents в Dialogflow, будет использовать его для ссылки на документ, который вы затем сможете читать или писать.