当我使用自己的文档ID(非自动生成)添加文档时,文档Id节点以斜体显示,如Firestore控制台的屏幕截图所示。这背后的原因是什么?
我添加数据的代码是
const billingRef = db
.collection('billing/test/2017/months/11')
.doc();
billingRef
.set({ name: 'ABC' })
.then(_ => {
console.log('saved');
})
.catch(err => {
console.log(err);
});
上面的代码成功添加了一个节点,但是以斜体添加节点“test”和“months”。
我的查询在firestore中为这些记录产生零结果,代码如下。如何查询结算下的所有节点?
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());
});
});
答案 0 :(得分:5)
按照上面的评论,您将在Firestore控制台中看到,对于斜体中的文档,有一个小文字说"此文档不存在,它不会出现在查询或快照中" ,对于非斜体,它说"此文档没有数据" ,所以直觉是当在没有任何字段的代码中创建Document时,它就是" null" (子集合不计算在内)。如果添加和删除了一个Field,那么Document只是空的而不是null。
由于您对结算下的文档的查询是斜体(" null"或者不存在),正如上面的文字所述,它们不会出现在查询中。
解决方案是通过Firestore控制台添加文档,因为这里将Documents创建为空,或者如果在代码中添加一个Field,如果不需要则可以再次删除它,那么Documents将出现在查询中。 / p>
答案 1 :(得分:1)
问题,后来我从这个问题的answer中发现,我正在为一个空文档创建一个子集合。这是我的代码,显示灰色文档。
db.collection('temporal')
.doc('documentexample')
.collection("files")
.add({
name: "Lorem"
})
.catch((error) => {
console.error("Error adding file: ", error);
});
在上面的代码中,文档documentexample
中没有字段。因此,代码继续执行并创建documentexample
(它没有字段),然后在其中files
中创建一个子集合。根据firebase的说法,它仅使第一个文档documentexample
变灰。
此问题的解决方法是先创建文档,然后在其中添加一个字段,然后再为其创建子集合...对于我的用例,我创建了一个函数来创建文档并向其中添加字段当用户首次注册时