天天看点

MongoDB-树形结构

树形结构

在 MongoDB 中我们除了可以使用 '内嵌式结构' 和 '规范式结构' 来表示数据的关系以外, 由于MongoDB数据的灵活性, 我们还可以使用'树形结构'来表示数据之间的关系。

树形结构概述

Database
               |
     |--------------------|
 Relational           No-Relational
     |          |-----------|-------------|
   MySQL      Key-Value                Document
                |                         |
              Redis                    MongoDB      

对于经常需要查询子节点的数据可以存储如以下的数据结构来表示:

{name:'Database', parent:null}
{name:'No-Relational', parent:'Database'}
{name:'Document', parent:'No-Relational'}
{name:'MongoDB', parent:'Document'}
{name:'Key-Value', parent:'No-Relational'}
{name:'Redis', parent:'Key-Value'}      

例如: 我们要查询非关系型数据库有几种类型, 我们可以使用 ​

​find({parent:'No-Relational'})​

​。

对于经常需要查询父节点的数据可以存储如下的数据结构来表示:

{name:'Database', children:['Relational', 'No-Relational']}
{name:'No-Relational', children:['Key-Value', 'Document']}
{name:'Document', children:['MongoDB']}
{name:'MongoDB', children:[]}      

例如: 我们要查询MongoDB是什么类型的的数据, 我们可以使用 ​

​find({children:{$in:['MongoDB']}})​

​。

对于经常查询祖先或者后代节点的数据的存储结构表示:

{name:'Database', ancestors:[]}
{name:'No-Relational', ancestors:['Database']}
{name:'Document', ancestors:['Database', 'No-Relational']}
{name:'MongoDB', ancestors:['Database', 'No-Relational', 'Document']}      

例如: 我们要查询MongoDB的祖先有哪些, 我们可以使用 ​

​find({name:'MongoDB'})​

​​,我们要查询Database的后代有哪些, 我们可以使用 ​

​find({ancestors:{$in:['Database']}}})​

​。

继续阅读