Запросы и снимки документов в облачном хранилище

#javascript #typescript #firebase #google-cloud-firestore #google-cloud-functions

#javascript #typescript #firebase #google-cloud-firestore #google-cloud-функции

Вопрос:

Я пытаюсь выполнить запрос, чтобы получить определенные документы в вложенной коллекции. Функция выполняется и не выдает ошибку, но массив как в ответе, так и в журнале консоли всегда пуст. В чем может быть ошибка? Код, который я использую, следующий:

    export const delay_query = functions.https.onRequest((request, response) => {
     const current_timestamp = admin.firestore.Timestamp.now().seconds
     admin.firestore().collection(`Message/{UserId}/{ChatRoomId}`).where('creationTime', '<', current_timestamp).get()
     .then((snapshot) => {


       console.log(snapshot.docs)
       response.send(snapshot.docs)
     })
     .catch( error => {
       console.log(error)
       response.status(500).send(error)
     })
   })
  

Ответ №1:

Вы пытаетесь запросить коллекцию с именем «Message /{userId} / {chatroomID}». Это именно та строка. Если вы ожидаете, что эти значения в фигурных скобках будут заменены другими значениями, этого не происходит. Фактически вы запрашиваете вложенную коллекцию, которая не существует.

Если вы хотите подставить значения в этот запрос, вам сначала нужно выяснить, откуда берутся эти значения, поскольку это не очевидно из вашего кода. Если вы пытаетесь использовать здесь интерполяцию строк JavaScript, вам нужно будет использовать знак доллара для вставки значения переменной, например «Message / $ {userId} / $ {chatroomID}». Конечно, сначала вы должны определить userId и chatroomID.

Комментарии:

1. Технически я пытаюсь запрашивать каждый документ в каждой вложенной коллекции chatroomID. Возможно ли это вообще? Например, мне нужно запрашивать каждый идентификатор чата

2. Вы, конечно, можете запрашивать все документы в коллекции. Вы просто делаете это неправильно, как я описал в своем ответе.

3. исправлю ли я это, просто запросив «Сообщение»? Или мне пришлось бы использовать for … например (для постоянного пользователя в идентификаторах пользователей), а затем используйте ${user}