Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Почему неавтоматически сгенерированные идентификаторы документов в консоли Firestore выделены курсивом?

Автор вопроса: KumarОтветов: 2

Когда я добавляю документ с моим собственным идентификатором документа (не сгенерированным автоматически), узел идентификатора документа выделяется курсивом, как показано на скриншоте из консоли Firestore. В чем причина этого?

Мой код для добавления данных

const billingRef = db
      .collection('billing/test/2017/months/11')
      .doc();

  billingRef
      .set({ name: 'ABC' })
      .then(_ => {
        console.log('saved');
      })
      .catch(err => {
        console.log(err);
      });

Приведенный выше код успешно добавляет узел, но добавляет курсивом узел "тест" и "месяцы".

снимок экрана 1

снимок экрана 2 снимок экрана 3

Мой запрос дает нулевые результаты для таких записей в хранилище огня, следующий код. Как я могу запросить все узлы при выставлении счетов?

db.collection("billing").get().then(function(querySnapshot) {
    console.log(querySnapshot.size) // this is always 0
    querySnapshot.forEach(function(doc) {
        console.log(doc.id, " => ", doc.data());
    });
});

  • Я не знаю истинной причины, но, насколько я могу судить, дело не в том, что идентификатор автоматически сгенерирован или нет. Я только что добавил документ с самотипизированным идентификатором, и он не был выделен курсивом, как и все другие (автоматически сгенерированные) идентификаторы в списке. Frank van Puffelen 09.12.2017
  • Обратите внимание, что вы смешиваете здесь два отдельных вопроса: 1. Почему некоторые идентификаторы документов отображаются в консоли курсивом? 2. Почему мой код не возвращает никаких документов? Я рекомендую публиковать каждый как отдельный вопрос, поскольку ответы могут иметь мало общего друг с другом. Frank van Puffelen 09.12.2017
  • На вопрос 2: есть ли у вас разрешение на чтение из /billing? Самый простой способ определить это - добавить .catch((function(error) { console.error(error); }). Frank van Puffelen 09.12.2017
  • Спасибо за внимание к этому Фрэнку, я считаю, что вопросы связаны, потому что это происходит только для идентификаторов документов, выделенных курсивом. Я обновил свой вопрос кодом, чтобы показать, как я добавляю записи в firestore, превращая идентификаторы документов в курсив. Я постоянно воспроизводил это поведение. Kumar 09.12.2017
  • Если test в billing/test/2017/months/11 ref не существует в Firestore, попробуйте использовать метод add(), чтобы сначала добавить документ, прежде чем ссылаться на него. Amy 14.12.2017
  • Никто еще не знает, в чем проблема? Vlad 17.12.2017

firebasegoogle-cloud-firestorefirebase-console

Ответы

Ответ 1 · рейтинг 22 · Simon Bøgh

Следуя моему комментарию выше, вы увидите в консоли Firestore, что для документов, выделенных курсивом, есть небольшой текст с надписью "Этот документ не существует, он не будет отображаться в запросах или снимках" для без курсива указано "В этом документе нет данных", поэтому интуиция подсказывает, что когда документ создается в коде без каких-либо полей, он имеет значение "null" (вложенная коллекция не учитывается). Если поле добавлено и удалено, документ будет просто пустым, а не пустым.

Поскольку ваш запрос для Документов по выставлению счетов выделен курсивом ("ноль" или не существует), как указано в тексте выше, они не будут отображаться в запросах.

Решением было бы либо добавить документ через консоль Firestore, потому что здесь документы создаются как пустые, либо, если в коде, добавить поле и, возможно, удалить его снова, если он не нужен, тогда документы появятся в запросах.

Ответ 2 · рейтинг 4 · Taio

Проблема, которую я позже обнаружил в ответе на этот вопрос для меня создавалась вложенная коллекция для пустого документа. Это был мой код, который выводил на экран неактивные документы.

       db.collection('temporal')
            .doc('documentexample')
            .collection("files")
            .add({
              name: "Lorem"
            })
            .catch((error) => {
              console.error("Error adding file: ", error);
            });

В приведенном выше коде документ documentexample не имеет поля. Таким образом, код идет вперед и создает documentexample (у него нет полей), а затем создает в нем подколлекцию files. Это, согласно firebase, просто затмевает первый документ documentexample.

Чтобы решить эту проблему, сначала создайте документ, добавьте в него поле, затем создайте подколлекцию к нему и так далее ... Для моего варианта использования я создал функцию, которая создает документ и добавляет в него поле, когда пользователь регистрируется впервые

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы