具有子引用的模型树结构

在本页面

Overview

MongoDB 中的数据具有弹性模式Collections不强制执行document结构。影响数据建模方式的决策会影响应用程序性能和数据库容量。请参阅数据建模概念,以获取有关 MongoDB 中数据建模的完整概述。

本文档描述了一种数据模型,该数据模型通过将父节点中的references存储到子节点来描述 MongoDB 文档中的树状结构。

Pattern

  • Child References *模式将每个树节点存储在文档中;除树节点外,文档还以数组的形式存储该节点的子节点的 ID。

考虑以下类别层次结构:

类别 samples 层次结构的树数据模型。

以下示例使用* Child References *对树进行建模,并将对节点的子级的引用存储在字段children中:

db.categories.insertMany( [
   { _id: "MongoDB", children: [] },
   { _id: "dbm", children: [] },
   { _id: "Databases", children: [ "MongoDB", "dbm" ] },
   { _id: "Languages", children: [] },
   { _id: "Programming", children: [ "Databases", "Languages" ] },
   { _id: "Books", children: [ "Programming" ] }
] )
  • 检索节点的直接子级的查询快速而直接:
db.categories.findOne( { _id: "Databases" } ).children
  • 您可以在字段children上创建索引以启用子节点的快速搜索:
db.categories.createIndex( { children: 1 } )
  • 您可以在children字段中查询节点,以找到其父节点及其兄弟节点:
db.categories.find( { children: "MongoDB" } )
  • Child References *模式为树存储提供了合适的解决方案,只要不需要对子树进行任何操作即可。此模式还可为存储图形(其中一个节点可能具有多个父对象)提供合适的解决方案。