如何用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