我希望能够向数据库 (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 个会更好‽
最佳答案
Multikeys 是解决这个问题的正确方法,因为它可以从数组的单个索引中找到任何文档,而无需进行表扫描。在您的情况下,您可以将代表标签的适当字母选择放入数组中:["a", "d", "e"]
。
在更复杂的情况下,每个字段都可以包含相同的标签值,例如歌曲名称、专辑名称、艺术家姓名……我有时会添加两次标签短语:一次单独添加,一次使用字段名称 pre -挂起,例如“艺术家:你好”
。现在我可以搜索出现在任何字段中的标记词或出现在特定字段中的标记词,无论哪种方式,它都会使用索引来查找匹配的记录。
关于mongodb - 在搜索结果中查找 A & C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369830/