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

Когда я добавляю документ с моим собственным идентификатором документа (не сгенерированным автоматически), узел идентификатора документа выделяется курсивом, как показано на скриншоте из консоли 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());
    });
});


person Kumar    schedule 09.12.2017    source источник
comment
Я не знаю истинной причины, но, насколько я могу судить, дело не в том, что идентификатор автоматически сгенерирован или нет. Я только что добавил документ с самотипизированным идентификатором, и он не был выделен курсивом, как и все другие (автоматически сгенерированные) идентификаторы в списке.   -  person Frank van Puffelen    schedule 09.12.2017
comment
Обратите внимание, что вы смешиваете здесь два отдельных вопроса: 1. Почему некоторые идентификаторы документов отображаются в консоли курсивом? 2. Почему мой код не возвращает никаких документов? Я рекомендую публиковать каждый как отдельный вопрос, поскольку ответы могут иметь мало общего друг с другом.   -  person Frank van Puffelen    schedule 09.12.2017
comment
На вопрос 2: есть ли у вас разрешение на чтение из /billing? Самый простой способ определить это - добавить .catch((function(error) { console.error(error); }).   -  person Frank van Puffelen    schedule 09.12.2017
comment
Спасибо за внимание к этому Фрэнку, я считаю, что вопросы связаны, потому что это происходит только для идентификаторов документов, выделенных курсивом. Я обновил свой вопрос кодом, чтобы показать, как я добавляю записи в firestore, превращая идентификаторы документов в курсив. Я постоянно воспроизводил это поведение.   -  person Kumar    schedule 09.12.2017
comment
Если test в billing/test/2017/months/11 ref не существует в Firestore, попробуйте использовать метод add(), чтобы сначала добавить документ, прежде чем ссылаться на него.   -  person Amy    schedule 14.12.2017
comment
Никто еще не знает, в чем проблема?   -  person Vlad    schedule 17.12.2017
comment
Я заметил, что когда вы устанавливаете данные в Firestore через код, если вы добавляете документ (тест и месяцы), который ТОЛЬКО содержит коллекцию (2017 и 11), они будут выделены курсивом. В момент добавления поля для тестирования и месяцев курсив будет удален. Моя интуиция (которая может быть ошибочной) заключается в том, что если документ инициализирован только с помощью коллекции и без полей, тогда он отображается как null (курсив) (отсутствие лучшего слова), но если поле добавлено, а также удалено, тогда он просто пустой (без курсива).   -  person Simon Bøgh    schedule 30.12.2017
comment
По вопросу 1: stackoverflow.com/a/48138953/2162226 - Спасибо @Frank   -  person Gene Bo    schedule 27.06.2018
comment
Вы не можете получить доступ к данным нулевого документа. Но вы можете получить доступ к подгруппе нулевого документа. Поскольку он возвращает doc.id, вы можете завершить свой путь к подгруппе   -  person Manish Champaneri    schedule 18.09.2019


Ответы (2)


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

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

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

person Simon Bøgh    schedule 30.12.2017

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

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

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

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

person Taio    schedule 18.05.2020