我正在尝试使用SQL做一些通常很简单的事情(例如,在同一个表中使用外键)(对于MongoDB来说可能很容易,我还不知道)这是构建一个递归数据结构
对于这个例子,我将讨论网站中的页面。我想制作一个多级页面结构。所以可能有:
假设网页上有标题和内容。
我需要知道最好的方法是什么,以及如何基于该数据结构构建站点地图(显示每个级别的每个页面的页面)。
我正在使用MongoDB为这种情况构建一个node.js应用程序。
编辑:通过简单地引用每个页面中的父页面,它不会起作用吗?页面就像{ title: 'test', content: 'hello world', parentPage: ObjectID(parent page) }
感谢您的帮助!
答案 0 :(得分:3)
我个人会在这里实现一个物化路径结构,使用前缀无大小写不敏感的正则表达式来更新和查询非常容易(这意味着它将使用索引),所以示例如下:
{_id: {}, path: 'about_us/where_are_we'}
正如您所看到的,这也允许SEO友好的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'}
当然,前面的回答说你必须知道你希望如何访问你的内容,但物化路径在我看来是一个良好的开端。
您可以在此处阅读有关Mongo树结构的更多信息:http://www.mongodb.org/display/DOCS/Trees+in+MongoDB
答案 1 :(得分:1)
您需要知道如何访问数据。
我最后一次使用树结构时,我在Ruby中实现了this(我从各种来源获取灵感),它存储了一个_id路径和完整的uri(slugified页面标题),这是一个痛苦的处理这样的结构。
另一方面,您可以创建集合文档(根)和嵌入文档(分支和叶子)。处理起来比较简单,但查询时必须得到整棵树,只有知道内部文档有多深,才能查询内部文档。
根据我过去的经验,支持树结构的所有工作都不值得(除非是必需的),大多数用户将基于标签而不是固定类别创建松散结构。