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