【问题标题】:Is there a "!=" operator in Firestore where clause, used in Cloud Functions? [duplicate]Cloud Functions 中使用的 Firestore where 子句中是否有“!=”运算符? [复制]
【发布时间】:2020-07-29 11:48:42
【问题描述】:

我想从 GET 请求中排除一些文档,所以我编写了以下代码(注意 users = users.where(admin.firestore.FieldPath.documentId(), '!=', k); 行):

let users = admin_firestore.collection('users');
const likes = admin_firestore.collection('likes_of_users_posts');
likes.get().then(function(likes_docs) {
        const map_users_id_with_number_of_likes = [];
        likes_docs.forEach(like_doc => {
            if(!(like_doc.data().post_owner in map_users_id_with_number_of_likes)) {
                map_users_id_with_number_of_likes[like_doc.data().post_owner] = 0;
            }
            map_users_id_with_number_of_likes[like_doc.data().post_owner] += 1;
        });
        Object.keys(map_users_id_with_number_of_likes).forEach((k) => {
            users = users.where(admin.firestore.FieldPath.documentId(), '!=', k);
        });

这是我的 Google Cloud Functions 功能的一部分。

当我在 Android 应用程序中执行此 Cloud Function 函数时,我可以在日志中看到以下错误:

错误:参数“opStr”的值无效。可接受的值为:、>=、数组包含

但是我真的需要写一些相当于:“不同于 X 并且不同于 Y 并且...”。所以像我一样链接.where(admin.firestore.FieldPath.documentId(), '!=', k)

【问题讨论】:

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


    【解决方案1】:

    不,Firestore 查询没有 != 运算符。原因是数据库的索引方式,更多信息请参见官方video

    有一些解决方法,例如,将一个查询与> 运算符结合起来,将另一个与< 结合起来。这个article 展示了如何组合两个不同的查询以模拟 OR 查询。

    我不确定这在您的情况下是否可行,因为您提到“不同于 X 并且不同于 Y 并且...”。您可能应该混合使用本文中描述的技术来模拟 OR 查询并在前端删除一些记录。

    【讨论】:

    • 是的,这不可能。太糟糕了,我必须改变我的代码的逻辑来解决pb
    • 我必须从我的 GET 请求中排除文档,因为我想影响这些文档的一个字段的任意值,同时我会将其他文档的这个字段初始化为 0。 (仅涉及一个集合)。你认为我可以使用批量更新将所有文档的这个字段初始化为0,然后使用批量更新来影响一些文档的字段的任意值,然后提交这个批量吗?所以必须遵守这些更新的顺序,否则它将不起作用(在这种情况下,文档的这个字段通常值为 != 0 将是 0,这是不好的)。
    • 可以,但是应该是两个不同的批次,见你昨天的question
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多