我有产品目录,我想通过许多参数对其进行过滤: 类别,价格,大小,颜色,范围等。

所以问题在于索引。

我可以尝试在所有字段上使用复合索引,并以与为其建立索引的顺序查询它们。但是,如果我只需要按尺寸和颜色过滤,然后仅按价格和重量过滤怎么办?为每个可能的过滤查询创建复合索引可能会过大,因为参数可能过多。

因此,在进行了一些搜索之后,我发现了有趣的方法

建议在那里使用“规范化属性”: 通用标签

现在mongo记录将如下所示: 通用标签

然后我应该按属性编制索引,然后我可以这样查询: 通用标签

优点是:

有帮助吗?

解决方案

(有效地)在商店目录中搜索确实是一项艰巨的任务。

是的,您可以创建其他集合并将所有值存储在那里 通用标签

否,您不需要每次都重新查询此集合。这里的数据大小可能很小,因此您可以在应用程序过程中将其缓存。不要忘记提示:始终将基数最低的属性放在首位。

另一种方法是使用位掩码,但是由于MongoDB具有有限的整数长度,因此无法获得无限数量的属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top