mongodb - 在搜索结果中查找 A & C

标签 mongodb math indexing tagging database

我希望能够向数据库 (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/

相关文章:

javascript - Mongoose 查询返回未定义的字符串

html - 有没有办法让数学公式在网页上看起来不错(例如在 LateX 中)

oracle - 为什么 Oracle 会忽略 "perfect"索引?

ios - 推送到另一个 UIViewController 时数组索引超出范围

java - mongodb 3.2 优化管道查询

mongodb - Doctrine MongoDB ODM 的原子操作

mongodb - 为什么 mongorestore 恢复索引?

mysql - 查询mysql一天总工作时间的最佳方法

iphone - C 或 Objective C 中的数学问题

python - 使用循环更新嵌套字典中的预先存在的值