firebase 有没有“!=”Firestore where子句中的运算符,在云函数中使用?[副本]

zdwk9cvp  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(106)

此问题已在此处有答案

Firestore: how to perform a query with inequality / not equals(7个回答)
3年前关闭。
我想从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)

fcy6dtqo

fcy6dtqo1#

不,Firestore查询没有!=运算符。原因是数据库的索引方式,更多信息请参阅官方video
这里有一些变通方法,例如,将一个查询与>运算符结合,将另一个查询与<运算符结合。此article展示了如何组合两个不同的查询以模拟OR查询。
我不确定这在你的情况下是否可能,就像你提到的“不同于X和不同于Y和……”。您可能应该混合使用本文中描述的技术来模拟OR查询并删除前端的一些记录。

相关问题