0

我有一个必须应用过滤器的集合 X。

过滤器保存为单独的实体(集合过滤器),它保存的唯一数据是字段名称和应用于该字段名称的条件

过滤器示例:

名字是斯蒂芬,年龄在 10 岁、20 岁之间

基本上我必须改进的是过滤器中的每个字段都是在创建过滤器时添加的索引。

唯一匹配的结构是过滤字段上的复合索引。

总之,问题是当我有一个过滤器时:

名字是斯蒂芬和年龄在 10,20 之间

我在 MongoDb 中的复合索引将是:{'Name':1,'Age':1}

但是,如果我添加另一个过滤器,假设:Age is 10 and Name is Adrian and Height BETWEEN 170,180

复合索引为:{'Age':1,'Name':1,'Height':1}

{'姓名':1,'年龄':1} <> {'年龄':1,'姓名':1,'身高':1}

我该怎么做才能使最后一个索引与第一个索引相匹配,反之亦然。

如果我没有明确表示,请告诉我。

4

1 回答 1

1

这个问题最干净的解决方案是索引交集,目前正在开发中。这样,每个标准的索引就足够了。

与此同时,我看到了两个选择:

  1. 使用单独的搜索数据库,根据您的条件返回相关 ID,然后$in在 MongoDB 中使用来查询实际文档。有许多工具使用这种方法,但它会增加相当多的开销,因为您需要针对第二个数据库进行编码和管理,保持数据同步等。
  2. 使用复合索引和“无限范围查询”的智能组合。例如,您可以争辩说,查询 (0, 200) 范围内的年龄不会丢弃结果集中的任何人,0 到 400 之间的身高查询也不会。

这可能不是最干净的方法,其效率很大程度上取决于查询的细节,因此可能需要进行一些微调。

于 2013-10-01T10:37:04.990 回答