首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个where数组-包含在单个查询中的google云防火墙。在搜索中应用带有排序的筛选产品

两个where数组-包含在单个查询中的google云防火墙。在搜索中应用带有排序的筛选产品
EN

Stack Overflow用户
提问于 2020-03-02 07:22:47
回答 1查看 270关注 0票数 0

我受到火力的限制。我想要实现的是两个数组-包含在一个查询和防火墙不允许这一点,它是限制在一个查询。

我在我的产品集合中有一系列关键字。例如:关键词:['men','men-clothing', 'men-clothing-denim']

我想搜索产品的基础上的关键字数组,如如果用户搜索男性,服装和过滤,通过选择品牌,牛仔。比关键词更频繁地附加,并最终制造了一串‘男人-衣服-品牌-牛仔’。现在我想在我的产品集合中搜索与我使用的关键字相同的地方(‘关键字’,‘数组-包含’,‘男人-服装-品牌-牛仔’)。

问题是,我也有排序我的应用程序,所以如果用户选择‘低到高’,我也希望在应用过滤器的同时对产品进行排序。我是排序产品的基础上,仅关键字。

Firestore不允许在一个查询中包含两个Where数组。当用户申请过滤器时,我也想对我的产品进行排序。

对于排序,我使用where('keywords', 'array-contains', 'men-clothing');

因此,最后,如果我想实现这两个目标,我需要将查询写成:

代码语言:javascript
运行
复制
db.collection('products').where('keywords', 'array-contains', 'men-clothing').where('price', 'desc').where('keywords','array-contains', 'men-clothing-brand-denim').get()

而且,firestore不支持两个其中的数组-在同一个查询中包含了使用防火墙实现这一目标的最佳方法。整个场景属于我的电子商务应用程序搜索组件,用户在其中搜索产品,出现一个产品列表,用户可以对产品进行过滤和排序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-02 10:30:52

我想实现的

是两个数组-包含在一个查询中,而Firestore不允许

你完全是对的。如果您将使用多个array-contains,因为会发生以下错误:

由: java.lang.IllegalArgumentException:无效查询引起。查询只支持有一个数组-包含过滤器。

但是,如果您同时需要对men-clothingmen-clothing-brand-denim关键字进行筛选,那么有一个解决办法可以帮助您解决这个问题。正如您已经注意到的,您不能使用array-contains,但是可以对数据库模式的逻辑做一些更改。因此,您应该考虑从keywords数组中为每个单独的值创建一个新属性,然后链接多个where()方法调用。多次调用此方法,它是完全有效的。

您的模式应该如下所示:

代码语言:javascript
运行
复制
keywords: { 
    "men": true,
    "men-clothing": true,
    "men-clothing-denim": true
}

现在您可以看到,keywords不再是一个数组了,它是一个Map。因此,使用这样的模式,您将能够同时找到与men-clothingmen-clothing-denim匹配的所有文档。需要的查询如下所示:

代码语言:javascript
运行
复制
db.collection('products')
    .where("men-clothing", "==", true)
    .where("men-clothing-denim", "==", true);

您还可以通过所需的属性调用添加订单,但不要忘记创建索引,正如我在下面的文章中解释的那样:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60484203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档