【问题标题】:How to build a recursive structure with MongoDB如何使用 MongoDB 构建递归结构
【发布时间】:2012-08-02 06:05:54
【问题描述】:

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

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

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

假设页面会有标题和内容。

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

我正在为这个案例使用 MongoDB 构建一个 node.js 应用程序。

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

感谢您的帮助!

【问题讨论】:

    标签: sql node.js mongodb data-structures recursion


    【解决方案1】:

    我个人会在这里实现一个物化路径结构,使用前缀不区分大小写的正则表达式很容易更新和查询(这意味着它将使用索引),因此示例如下所示:

    {_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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我在考虑标签或其他类型的分类,但我仍然想知道如何以这种方式模拟关卡?感谢您的回复!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2019-01-28
      • 2020-07-17
      • 2019-12-25
      • 1970-01-01
      相关资源
      最近更新 更多