当我使用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中。
答案 0 :(得分:3)
这确实是Node SDK的一个功能遗漏,我们将在下一个版本中解决。
您现在可以通过直接传递DocumentReference来解决此问题:
const coll = admin.firestore().collection('test')
coll
.where(admin.firestore.FieldPath.documentId(), '<=', coll.doc('ccc'))
.get()
.then(snapshots => { /* ... */ });