Firebase / Firestore数据不起作用

时间:2019-08-29 16:53:38

标签: firebase google-cloud-firestore google-cloud-functions

我正在尝试使用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()进行查询,它可以正常工作,但是无法通过字段值查找文档。 setupdate也可以正常工作。

1 个答案:

答案 0 :(得分:2)

您编写的以下代码:

db.collection('users').where('appToken', '==', 'xxxx').get()

返回使用QuerySnapshot类型的对象(而不是DocumentSnapshot)解析的承诺。从链接的API文档中可以看到,QuerySnapshot没有像DocumentSnapshot那样的data()方法。这是因为SDK事先不知道结果集中有多少个文档。因此,您必须迭代结果。一种方法是使用QuerySnapshot上的docs属性,该属性只是与查询约束匹配的QueryDocumentSnapshots数组。或使用其forEach方法。

documentation中有很多示例。