所以我正在开展一个宠物项目,我正在存储各种文本文件。我已经设置了我的应用程序将标签保存为我的一个集合中的字符串,所以一个例子是:
标签:“Linux Apache WSGI”
存储它们并搜索它们工作得很好,但是当我想做一些像标签云,计算所有各种标签,或者根据标签制作动态选择系统时,问题出现了,最好的方法是什么?他们一起工作?或者我应该以其他方式存储它们吗?
逻辑上我可以扫描每条记录并获取所有标签,根据空间打破它们,然后以某种方式缓存结果。也许这是正确的答案,但我想问社区的智慧。
我正在使用pymongo与我的数据库进行交互。
答案 0 :(得分:6)
或者我应该以其他方式存储它们吗?
存储标签的标准方法是将它们存储为数组。在您的情况下,数据库看起来像:
tags: ['linux', 'apached', 'wsgi']
......打破他们合作的最佳方式是什么?
这是Map/Reduce的目的。这有效地“扫描每条记录”。 Map / Reduce的输出是您可以查询的另一个集合。
然而,还有另一种方法可以做到这一点,那就是保持“计数器”并更新它们。因此,当您保存新文档时,还会增加与该文档相关的所有标记。