1

我正在尝试用 SQL 做一些通常简单的事情(例如,在同一个表中使用外键)(它可能与 MongoDB 一样简单,我只是还不知道),即构建递归数据结构。

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

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

假设页面有标题和内容。

我需要知道执行此操作的最佳方法是什么,以及如何基于该数据结构(显示每个级别的每个页面的页面)构建站点地图。

对于这种情况,我正在使用 MongoDB 构建一个 node.js 应用程序。

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

谢谢您的帮助!

4

2 回答 2

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

于 2012-08-04T12:57:34.077 回答
1

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

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

另一方面,您可以创建集合文档(根)和嵌入文档(分支和叶子)。处理起来比较简单,但是查询的时候需要获取整棵树,而且只有知道深度才可以查询内部文档。

根据我过去的经验,支持树形结构的所有工作都得不偿失(除非它是必需的),大多数用户将创建一个基于标签而不是固定类别的松散结构。

于 2012-08-04T12:46:40.937 回答