关于Mongoid / MongoDB标签树结构的建议

时间:2010-09-20 17:41:21

标签: tags mongodb nested mongoid

我正在寻找有关如何构建此数据模型的标记部分的一些建议:

以下是它的简化版本:

  • 一个网站有很多帖子(关系协会[在孟加拉语中引用_many])。网站有一个标签树
  • 帖子有一系列标签(网站标签的子集,顺序无关紧要)

我关心的用例是:

  1. 快速保存&以树形式检索站点的标签(即能够在UI中将它们显示为树)
  2. 快速查询某个网站的帖子中是否有某个标记。
  3. 没有树结构,http://github.com/wilkerlucio/mongoid_taggable解决了我的用例。我见过Mongoid的一些acts_as_tree端口,如:

    他们似乎都采用了与嵌入式相关的关系方法来存储层次结构,这意味着上面的两个用例都会很慢(可能需要map / reduce)。

    有没有人做过类似的事,或者有任何建议?理想情况下,我喜欢Mongoid解决方案,但我也很乐意接受Ruby驱动程序。

2 个答案:

答案 0 :(得分:2)

您是否需要更新树的结构(即将标签移动到另一个父级)?如果可能的话,嵌入式方法将变得困难,并且关系/规范化方法更有意义。

我可能会将标签本身存储在文档中(嵌入式),但如果我有可能需要在线移动树节点,那么我会将层次结构存储在另一个文档中。如果您首先展平搜索查询(根据当前树)然后搜索这些标记,则查询不必太慢。如果展平的搜索查询最终包含数百个标记(您的树有多高?),这种方法可能无法很好地扩展。

如果标签无法移动到新的父母(或仅由您,在计划的维护期间),请继续并嵌入整个层次结构。

答案 1 :(得分:0)

有两种实现的mongodb tree structure

模式