在MongoDB中存储/处理文档管理系统的标签
我正在做一个小项目,里面存储了各种文本文件。我设置了我的应用程序,把标签作为字符串保存在我的一个集合里,比如说:
标签: "Linux Apache WSGI"
存储和搜索这些标签都没问题,但我遇到的问题是,当我想做一个标签云,统计所有不同的标签,或者根据标签创建一个动态选择系统时,应该怎么处理这些标签?或者我应该用其他方式来存储它们吗?
从逻辑上讲,我可以遍历每一条记录,获取所有的标签,然后根据空格把它们分开,再以某种方式缓存结果。也许这就是正确的做法,但我想请教一下大家的意见。
我正在使用pymongo来和我的数据库进行交互。
1 个回答
6
或者我应该用其他方式来存储它们吗?
存储标签的标准方法是把它们放在一个数组里。在你的情况下,数据库看起来大概是这样的:
tags: ['linux', 'apached', 'wsgi']
... 有什么好的方法来拆分它们以便使用吗?
这就是 Map/Reduce 的用途。它的作用是“扫描每一条记录”。Map/Reduce 的输出是另一个可以查询的集合。
不过,还有另一种方法,就是保持“计数器”,并对它们进行更新。这样,当你保存一个新文档时,也会把与这个文档相关的所有标签的计数加一。