使用子引用对树结构进行建模
Overview
本页介绍的数据模型可通过在父节点中存储对子节点的引用来描述 MongoDB 文档中的树状结构。
模式
子项引用模式会将每个树节点存储在文档中;除树节点外,此文档还会将该节点的子节点的 ID 存储在数组中。
以以下类别层次结构为例:
以下示例使用子引用对树进行建模,并将对该节点的子节点的引用存储在字段 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" } )
只要无需对子树进行操作,子引用模式就可为树存储提供一种合适的解决方案。此模式还可为存储特定图表(其中的节点可能具有多个父节点)提供合适的解决方案。