使用子引用构建模型树结构
概述
本页描述了一个数据模型,该模型通过在父节点中存储引用来在MongoDB文档中描述树状结构。引用在父节点到子节点之间。
模式
子引用模式将每个树节点存储在一个文档中;除了树节点外,文档还将节点子节点的id(s)存储在一个数组中。
考虑以下类别层次结构
以下示例使用子引用来建模树,将节点子节点的引用存储在字段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" } )
只要不需要对子树进行操作,子引用模式就为树存储提供了一个合适的解决方案。此模式还可能为存储图形提供了合适的解决方案,其中节点可能有多个父节点。