如何用MongoDB构buildrecursion结构

我试图做一些通常简单的SQL(例如,在同一个表中的外键)(这可能是与MongoDB一样简单,我只是不知道),这是build立一个recursion数据结构。

在这个例子中,我将讨论网站中的页面。 我想做一个多层次的页面结构。 所以可能有:

  • 我们的产品
    • 产品1
    • 产品2
  • 关于我们
    • 我们在哪?
    • 联系我们

比方说,网页将有一个标题和一个内容。

我需要知道什么是最好的方法来做到这一点,也是我可以build立一个基于该数据结构(显示每个级别的每个页面的页面)的网站地图。

我正在为MongoDB构build一个node.js应用程序。

编辑:它不会通过简单地引用每页中的父页面工作? 页面会像{ title: 'test', content: 'hello world', parentPage: ObjectID(parent page) }

谢谢您的帮助!

您将需要知道如何访问您的数据。

上一次我使用树结构的时候,我在Ruby中实现了这个function (我从各种来源获得了灵感),它存储了一个_idpath和完整的uri(slugified页面标题),处理这样的结构是一件痛苦的事情。

另一方面,您可以创build一个收集文档(根)和embedded式文档(分支和叶子)。 处理起来比较简单,但是查询时你必须得到整棵树,只有知道它有多深才能查询内部文档。

从过去的经验来看,所有支持树型结构的工作都是不值得的(除非是要求),大多数用户将基于标签而不是固定类别创build松散结构。

就我个人而言,我会在这里实现一个物化path结构,这是很容易更新和查询使用前缀不区分大小写的正则expression式(这意味着它将使用索引),所以一个例子如下所示:

 {_id: {}, path: 'about_us/where_are_we'} 

这也正如你所看到的,允许search引擎友好的URL直接击中这棵树给你最大的力量。 这对于您希望显示如下URL的帮助系统非常有用:

 /help/how-to-use-my-site 

由于how-to-use-my-site可以直接击中的道路,甚至进一步,你可以容纳两个领域,直接点击全文如下:

 {_id: {}, path: 'about_us/where_are_we', normalised_url: 'where_are_we'} 

当然,正如前面的答案所说的,你必须知道你希望如何访问你的内容,但在我看来物化path是一个好的开始。

你可以在这里阅读Mongo的树结构: http : //www.mongodb.org/display/DOCS/Trees+in+MongoDB