【发布时间】:2012-05-09 08:02:21
【问题描述】:
我希望能够为数据库 (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 个索引会更好‽
【问题讨论】:
-
让索引更简单的好主意。不幸的是,如果您必须计算位掩码,我认为您无法利用索引。
-
我认为您正在寻找的是按位与,例如:value & 4 != 0,还是我错了? (您必须在不能使用索引的 javascript 中执行此操作)
标签: mongodb math indexing tagging database