【问题标题】:Why is Firestore returning inconsistent results when queried inside Cloud Functions?为什么在 Cloud Functions 中查询时 Firestore 返回不一致的结果?
【发布时间】:2019-06-03 22:20:04
【问题描述】:

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

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

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。每次运行该函数时,它都会显示似乎是一个随机数。

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    最后,这是一个答案:

    谷歌的人是这样说的:

    错误是由这个问题https://github.com/grpc/grpc-node/issues/895引起的。我们的工程师建议删除 node_modules 并尝试重新安装,因为 grpc-js 0.4.1 现在未发布。

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

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

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

    ----原创评论---

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

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

    var count = 10
    getAgain()
    function getAgain() {
      admin.firestore().collection('activity').get().then((qs) => {
        console.log("activities: got " + qs.docs.length)
        count--
        if (count) getAgain()
      })
    }
    
    CONSOLE LOG:
    activities: got 24
    activities: got 6
    activities: got 6
    activities: got 2
    activities: got 11
    activities: got 6
    activities: got 2
    activities: got 12
    activities: got 13
    activities: got 14
    
    

    【讨论】:

    • 嗨,Thomas,欢迎来到堆栈溢出。答案不是 cmets,您可能希望删除它,因为它会很快被否决。
    • 感谢您的评论,托马斯。正如蒂姆建议的那样,请删除此答案并将其添加为更合适的主要问题的评论。此外,+1 是主要问题,因此我们可以获得可见性并可能找到解决方案。谢谢!
    • 我没有足够的声誉来评论原始问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多