文档菜单
文档首页
/
MongoDB 手册
/ / /

使用祖先数组构建模型树结构

本页内容

  • 概述
  • 模式

本页描述了一个数据模型,该模型使用引用来描述父节点以及存储所有祖先的数组,来在MongoDB文档中实现类似树形结构。

祖先数组模式将每个树节点存储在一个文档中;除了树节点外,文档还将在一个数组中存储节点的父节点id或路径。

考虑以下类别层次结构

Tree data model for a sample hierarchy of categories.

以下示例使用祖先数组来模型树。除了ancestors字段外,这些文档还在parent字段中存储直接父类别的引用

db.categories.insertMany( [
{ _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" },
{ _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" },
{ _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" },
{ _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" },
{ _id: "Programming", ancestors: [ "Books" ], parent: "Books" },
{ _id: "Books", ancestors: [ ], parent: null }
] )
  • 查询节点祖先或路径的查询既快速又简单

    db.categories.findOne( { _id: "MongoDB" } ).ancestors
  • 您可以在ancestors字段上创建索引,以启用通过祖先节点进行快速搜索

    db.categories.createIndex( { ancestors: 1 } )
  • 您可以通过ancestors字段进行查询,以找到其所有后代

    db.categories.find( { ancestors: "Programming" } )

祖先数组模式通过在祖先字段元素上创建索引,为查找节点的后代和祖先提供了一个快速有效的解决方案。这使得祖先数组成为处理子树的好选择。

祖先数组模式比材料化路径模式略慢,但使用起来更直接。

返回

子引用

本页内容