树形结构
在 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']}}})
。
还有一种就是结合深度优先或者广度优先算法来实现树形结构,这里不介绍。