我正在Firebase功能中使用Cloud Firestore。我遇到在查询中使用“ where”的问题,因为我不知道确切的语法。如果我错了,请纠正我。
self.dbManager.collection('test').where('entry_date', '==','2018-06-29').where('entry_status','==','active').get().then( async doc => {
console.log("doc--------->",doc);
console.log("doc--------->",doc.data());
conv.data.userQuesData = doc.data()
});
当我使用“ doc.data()”时,出现以下错误。我们拥有上述条件的数据
TypeError: doc.data is not a function
at MYservice.<anonymous> (/user_code/services/myService.js:99:62)
at step (/user_code/services/myService.js:32:23)
at Object.next (/user_code/services/myService.js:13:53)
at /user_code/services/myService.js:7:71
at __awaiter (/user_code/services/myService.js:3:12)
at /user_code/services/daoService.js:94:168
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
答案 0 :(得分:0)
执行查询时,get()返回包含QuerySnapshot对象的promise。
在您的代码中,您将QuerySnapshot分配给名为doc
的变量,然后显然假定它是DocumentSnapshot类型的对象,这是失败的。
您需要调整代码以处理QuerySnapshot而不是DocumentSnapshot。请参阅QuerySnapshot文档,以了解对集合的查询所返回的内容。特别要注意,来自查询的文档匹配列表可以在docs属性中视为QueryDocumentSnapshot对象。
答案 1 :(得分:0)
对集合执行查询时,可能有多个符合条件的文档。因此,查询返回一个QuerySnapshot
,其中包含匹配的文档。您将需要遍历QuerySnapshot
以获得单个文档:
self.dbManager.collection('test').where('entry_date', '==','2018-06-29').where('entry_status','==','active').get().then( async querySnapshot => {
querySnapshot.forEach(doc => {
console.log("doc--------->",doc.data());
});
});
请注意,documentation on getting multiple documents对此进行了很好的介绍,我建议您这样做,因为查询功能是基于此之上的。