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