3

我希望能够向数据库 (MongoDB) 中的记录添加最多 10 个标签,但我不想在每个列上添加 10 个带有相关索引的列。所以我想我会添加这些标签的唯一总和。

例如(有 6 个标签)

|------------|
|value | tag |
|------------|
|1     |a    |
|2     |b    |
|4     |c    |
|8     |d    |
|16    |e    |
|32    |f    |
|------------|

例如

a + b = 3

b + c + d = 14

然后我只将值的总和存储在 Mongo 中。

这些组合始终是唯一的,当使用迭代从持久存储中提取时,我可以将它们“重构”回标签。

int tagSum
for each (tag in tagCollection.OrderDescending)
{
    if (tagSum >= (int)tag)
    {
        TagProperty.Add(targetAge);
        tagSum -= (int)tag;
    }
}

然而,我的问题是我认为必须有一个数学公式可以用来查询特定标签,例如通过传入值 4 来查找“c ​​标签”。我错了,或者我找不到它。

我很高兴在 Mongo 中使用 Multikeys 解决方案,但我还有很多其他数据要索引,使用 1 个索引而不是 10 个索引会更好‽</p>

4

2 回答 2

1

Multikeys 是解决这个问题的正确方法,因为它可以从数组上的单个索引中找到任何文档,而无需进行表扫描。在您的情况下,您可以将代表标签的适当字母选择放入数组中:["a", "d", "e"].

在更复杂的情况下,每个字段都可以包含相同的标签值,例如歌曲名称、专辑名称、艺术家姓名……我有时会添加两次标签短语:一次单独添加,一次在字段名称前添加,例如"artist:Hello"。现在我可以搜索出现在任何字段中的标签词或出现在特定字段中的标签词,无论哪种方式,它都会使用索引来查找匹配的记录。

于 2012-04-29T05:40:02.103 回答
0

将标签 af 转换为整数 0-5,调用它tagValue,那么你想要的数字就是1<<tagValue

于 2012-04-29T05:13:25.360 回答