在Cloud Functions中查询时,为什么Firestore返回的结果不一致?

时间:2019-06-03 22:20:04

标签: node.js firebase google-cloud-firestore google-cloud-functions

我的目标是创建一个幂等云函数,以更新某些文档的计数器。

我不是在增加或减少计数器,而是查询文档并使用结果总数更新计数器。

const db = admin.firestore();

export const unprocessedReceiptsCount = 
functions.firestore.document('Purchases/{purchaseId}')
.onWrite(async (snapshot, context) => {

    const unprocessedRef = db.collection('Purchases').where('hasBeenProcessed', '==', false);
    const unprocessedSnap = await unprocessedRef.get();
    const count = unprocessedSnap.docs.length;
    console.log(count);
    return count;

});

当我更新任何文档中的hasBeenProcessed字段时,它应该记录一个一致的数字。但是,我得到了全面的结果:2、63、8、44。每次运行该函数时,它都会显示似乎是一个随机数。

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

最后,这是一个答案:

Google员工这样说:

该错误是由此问题https://github.com/grpc/grpc-node/issues/895引起的。我们的工程师建议删除node_modules,然后尝试再次安装,因为grpc-js 0.4.1现在尚未发布。

他们的解决方案对我不起作用,但确实如此:

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAAABlBMVEX///8AAABVwtN+AAAAF0lEQVQImWNgoAJghABkHrIcskpSjAUABSYAEabdEBsAAAAASUVORK5CYII=

这也解决了Cloud Functions中的问题。

----原始评论---

我遇到了同样的问题。上周效果很好,现在即使是没有限制的简单get()也会返回随机数的结果。

以下代码演示了admin SDK的问题。我已经向Google提交了错误报告。

npm uninstall @grpc/grpc-js
npm install @grpc/grpc-js@0.4.0