进入MongoDB中文手册(4.2版本)目录
1 概述
此页面描述了一种数据模型,该数据模型是在父节点中存储对子节点的引用的树形结构文档。
2 模式
子引用模式存储文档中的每个树节点; 除树节点外,文档还以数组的形式存储该节点的子节点的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" } )
只要子树操作一定没有的话,子引用模式提供以树存储的合适的解决方案。此模式还可为存储图形(其中一个节点可能具有多个父对象)提供合适的解决方案。