在Firebase函数中按documentId查询

时间:2018-02-14 13:50:06

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

当我使用documentId作为字段路径从Firebase Firestore查询数据时,在网页(javascript)和Firebase函数(Node.js)中运行脚本时会出现不同的行为。

这个javascript给了我完美的结果:

firebase.firestore().collection('test')
  .where(firebase.firestore.FieldPath.documentId(), '<=', 'ccc')
  .get()
  .then(snapshots => { /* results are here */ });

与Firebase函数(Node.js)中的相同代码相反:

admin.firestore().collection('test')
  .where(admin.firestore.FieldPath.documentId(), '<=', 'ccc')
  .get()
  .then(snapshots => { /* ... */ });

给了我一个错误:

  

错误:{错误:__name__上的过滤器必须是ClientReadableStream._receiveStatus上ClientReadableStream._emitStatusIfDone(/user_code/node_modules/firebase-admin/node_modules/grpc/src/client.js:255:19)的文档资源名称(/user_code/node_modules/firebase-admin/node_modules/grpc/src/client.js:233:8)atuser_code/node_modules/firebase-admin/node_modules/grpc/src/client.js:705:12代码:3 ,元数据:元数据{_internal_repr:{}​​}}

我使用自己的文档ID,我想通过这些ID进行查询。我知道我可以通过查询某个文档的内部字段来解决这个问题,但我的问题是:这种不同行为的原因是什么?非常感谢。

我的firebase版本是3.17.4

编辑:此错误已解决,并且未显示在Firebase版本3.18.2中。

1 个答案:

答案 0 :(得分:3)

这确实是Node SDK的一个功能遗漏,我们将在下一个版本中解决。

您现在可以通过直接传递DocumentReference来解决此问题:

const coll = admin.firestore().collection('test')
coll
  .where(admin.firestore.FieldPath.documentId(), '<=', coll.doc('ccc'))
  .get()
  .then(snapshots => { /* ... */ });