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