Хобрук: Ваш путь к мастерству в программировании

Запрос Firestore возвращает пустой снимок

У меня есть прослушиватель node websocket, настроенный на запрос некоторых данных из моей базы данных. Однако в настоящее время запрос возвращает пустой снимок, хотя я знаю, что запрос должен что-то вернуть.

Я делаю простой форум на основе узла (хотя я довольно новичок в узле, так что это не так уж хорошо, лол), и я пытаюсь запросить данные сообщения с сервера для отправки обратно клиенту. Я попытался проверить правильность моих ссылок на сообщения и дважды проверил, что значения, которые я запрашиваю, существуют в коллекции. Я также уже проверил, что данные были отправлены через сокет правильно, поэтому я в недоумении.


let query = db.collection('posts').where('id','==',postID);
query.get().then(snapshot => {
      if (snapshot.empty) {
        client.emit('resPost', 'Failed');
        return;
      }
      snapshot.forEach(doc => {
        console.log(doc.data());
        client.emit('resPost', doc.data());
      });
});

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

Изменить: по предложению @Phil я включил журнал для переменной postID.

console.log('postID', typeof postID, JSON.stringify(postID))

Выход:

postID string "0"

Вот скриншот консоли, если нужно. ClientID — это идентификатор соединения через веб-сокет. https://imgur.com/a/MdtwEvu


  • Итак, вы получили сообщение Failed? Вы пытались отладить значение postID? 31.10.2019
  • @Phil Не могли бы вы рассказать об этом подробнее? Извините, я новичок, поэтому я не знаю, что вы подразумеваете под отладкой значения. Если вы имеете в виду вход в консоль, чтобы проверить правильность значения, я это уже сделал. 31.10.2019
  • Если вы имеете в виду вход в консоль ???? что-то в этом роде, да (хотя настоящий отладчик предпочтительнее). Вы должны убедиться, что значение postID точно соответствует вашим ожиданиям. В частности, проверьте наличие начальных/конечных пробелов. Но вы не ответили на мой первый вопрос. Кроме того, как выглядят данные вашей коллекции? Есть ли у него вообще свойство id? 31.10.2019
  • @Phil Ах, извините, да, я получаю ответ Failed в своем клиенте, когда пытаюсь запросить публикацию. postID — это целое число, передаваемое через функцию, поэтому в нем не должно быть начальных или конечных пробелов или других символов. Коллекция содержит отдельные документы для каждой должности. Каждое сообщение содержит данные, необходимые для форума, включая свойство id. 31.10.2019
  • Не могли бы вы добавить console.log('postID', typeof postID, JSON.stringify(postID)) перед своим запросом и отредактировать свой вопрос, чтобы включить вывод точно в том виде, в котором он появляется в вашей консоли / терминале (скриншот, если возможно). Кроме того, что произойдет, если вы опустите .where()? Есть ли у вас какие-либо результаты после этого? 31.10.2019
  • @Phil Я отредактировал сообщение выше, надеюсь, это поможет. Вывод консоли — это только одна строка, поэтому я просто включил ее туда, потому что так удобнее, но если вам все еще нужен снимок экрана, дайте мне знать. Пропуск запроса вернул полную коллекцию, как и ожидалось. { desc: 'Test Post.', content: 'Test Post.', date: '31th October 2019', id: 2, title: 'Test Post', author: 'Test' } Клиент также получил данные, как и ожидалось. imgur.com/a/5glY17m 31.10.2019
  • Также этот пост является лишь одним из постов в коллекции. Я включил только один документ, так как другие довольно длинные и имеют очень длинный вывод. 31.10.2019
  • Подшути над мной и попробуй .where('id', '==', parseInt(postID, 10)) 31.10.2019
  • @Phil Кажется, это сработало! Если не сложно, не могли бы вы объяснить мне, что именно это сделало? Большое спасибо за ваше время. 31.10.2019
  • Кажется, что запрос Firestore чувствителен к типу, поэтому условия для целочисленных значений должны быть сделаны с использованием целых чисел вместо строк. 31.10.2019
  • Я, наверное, должен был раньше понять, что URL-запрос был строкой, а не целым числом. 31.10.2019

Ответы:


1

Я очень удивлен, что нигде нет повторяющегося вопроса, но вот ваш ответ...

Условия равенства запросов Firestore чувствительны к типу. Если ваше свойство коллекции является целым числом, вам нужно сравнить его с целым числом, а не со строкой.

Например

db.collection('posts').where('id', '==', parseInt(postID, 10))
30.10.2019
  • @Rayinator не проблема. Я действительно удивлен этим, поскольку в документации есть примеры использования строк в сравнениях ">" и "<" ~ firebase.google.com/docs/firestore/query-data/ 31.10.2019
  • Новые материалы

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..