如何使用Cloud Firestore中的位置

时间:2018-07-02 07:31:31

标签: javascript firebase google-cloud-firestore

我正在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)

2 个答案:

答案 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对此进行了很好的介绍,我建议您这样做,因为查询功能是基于此之上的。