我正在尝试使用Firebase云函数内的where子句进行简单的firestore查询,但得到foo.data is not a function
。
exports.uploadList = functions.https.onRequest(async (req, res) => {
try {
let foo = await db.collection('users').where('appToken', '==', 'xxxx').get()
if (foo) {
return res.status(200).send({ foo: foo.data() })
}
} catch (error) {
return res.status(500).send(error)
}
})
我得到的响应是一个空对象{}
,如果删除try / catch块,我会在云函数日志foo.data is not a function
中看到错误。
我了解到where()
是可选的,所以也尝试了db.collection('users').get()
,结果相同。
我可以使用db.collection().doc().get()
进行查询,它可以正常工作,但是无法通过字段值查找文档。 set
和update
也可以正常工作。
答案 0 :(得分:2)
您编写的以下代码:
db.collection('users').where('appToken', '==', 'xxxx').get()
返回使用QuerySnapshot类型的对象(而不是DocumentSnapshot)解析的承诺。从链接的API文档中可以看到,QuerySnapshot没有像DocumentSnapshot那样的data()
方法。这是因为SDK事先不知道结果集中有多少个文档。因此,您必须迭代结果。一种方法是使用QuerySnapshot上的docs
属性,该属性只是与查询约束匹配的QueryDocumentSnapshots数组。或使用其forEach
方法。
documentation中有很多示例。