MongoDB五种树形结构

mongodb-tree-structure:在MongoDB中实现树结构 在MongoDB中实现树结构 一种使用一个MongoDB集合实现树结构的方法。 显示模式设计和CRUD概念的一些基本思想。 在示例代码中使用和 。 [警告] 根据我很少的经验,这只是一种实现树结构的方法。 这可能不是您情况下的最佳选择。 如果您有任何建议,请随时与我联系。 架构图 每个文档代表一个树节点。 它具有“父”,“子”和“祖先”字段,分别保存文档ID(由MongoDB提供)作为节点引用。 通常,您需要一个文档作为树结构的顶层节点(或“根”)。 除顶级节点外,每个节点都必须引用其他任何一个节点作为其父节点。 一个节点可以有零个到多个子节点。 “祖先”保存从顶层节点一直到其父节点的所有祖先节点的参考。 // schema.js import mongoose from 'mongoose' const Schema = mongoose . Schema const treeSchema = new Schema ( { parent : { type : Schema . Types . ObjectId , ref : 'Node' } , 立即下载

MongoDB五种树形结构表示法

第一种:父链接结构

db.categories.insert( { _id: "MongoDB", parent: "Databases" } )db.categories.insert( { _id: "dbm", parent: "Databases" } )db.categories.insert( { _id: "Databases", parent: "Programming" } )db.categories.insert( { _id: "Languages", parent: "Programming" } )db.categories.insert( { _id: "Programming", parent: "Books" } )db.categories.insert( { _id: "Books", parent: null } )

特征:

  1. 快速获取父节点:

    db.categories.findOne( { _id: "MongoDB" } ).parent

  2. 方便创建父节点索引

    db.categories.ensureIndex( { parent: 1 } )

  3. 通过查询父节点获取儿子节点

    db.categories.find( { parent: "Databases" } )

4.需要多个查询来检索子树。

第二种:子链接结构

db.categories.insert( { _id: "MongoDB", children: [] } )db.categories.insert( { _id: "dbm", children: [] } )db.categories.insert( { _id: "Databases", children: [ "MongoDB", "dbm" ] } )db.categories.insert( { _id: "Languages", children: [] } )db.categories.insert( { _id: "Programming", children: [ "Databases", "Languages" ] } )db.categories.insert( { _id: "Books", children: [ "Programming" ] } )

特征:

  1. 快速获取儿子节点

    db.categories.findOne( { _id: "Databases" } ).children

  2. 方便创建子节点索引

    db.categories.ensureIndex( { children: 1 } )

  3. 通过查询儿子节点获取父节点

    db.categories.find( { children: "MongoDB" } )

  4. 适合存储存储图,一个节点可能有多个父母。

第三种:祖先队列结构

db.categories.insert( { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )db.categories.insert( { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )db.categories.insert( { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" } )db.categories.insert( { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" } )db.categories.insert( { _id: "Programming", ancestors: [ "Books" ], parent: "Books" } )db.categories.insert( { _id: "Books", ancestors: [ ], parent: null } )

特征:

  1. 快速获取祖先

    db.categories.findOne( { _id: "MongoDB" } ).ancestors

  2. 方便创建祖先节点索引

    db.categories.ensureIndex( { ancestors: 1 } )

  3. 通过查询祖先来获取后代

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

  4. 祖先模式略慢于物化路径模式

第四种:物化路径结构

db.categories.insert( { _id: "Books", path: null } )db.categories.insert( { _id: "Programming", path: ",Books," } )db.categories.insert( { _id: "Databases", path: ",Books,Programming," } )db.categories.insert( { _id: "Languages", path: ",Books,Programming," } )db.categories.insert( { _id: "MongoDB", path: ",Books,Programming,Databases," } )db.categories.insert( { _id: "dbm", path: ",Books,Programming,Databases," } )

特征:

  1. 通过查询检索排序

    db.categories.find().sort( { path: 1 } )

  2. 快速查找子节点

    db.categories.find( { path: /^,Books,/ } )db.categories.find( { path: /^,Books,/ } )

  3. 为路径创建索引

    db.categories.ensureIndex( { path: 1 } )

第五种:集合模型

db.categories.insert( { _id: "Books", parent: 0, left: 1, right: 12 } )db.categories.insert( { _id: "Programming", parent: "Books", left: 2, right: 11 } )db.categories.insert( { _id: "Languages", parent: "Programming", left: 3, right: 4 } )db.categories.insert( { _id: "Databases", parent: "Programming", left: 5, right: 10 } )db.categories.insert( { _id: "MongoDB", parent: "Databases", left: 6, right: 7 } )db.categories.insert( { _id: "dbm", parent: "Databases", left: 8, right: 9 } )

特征:

  1. 快速获取子节点

    var databaseCategory = db.categories.findOne( { _id: "Databases" } );db.categories.find( { left: { $gt: databaseCategory.left }, right: { $lt: databaseCategory.right } } );

  2. 内容修改很低效适合静态树。

使用MongoDB存储类似层次结构的树 在MongoDB中使用NoSQL数据库存储树状结构的三种方法 立即下载

相关推荐

2022(一等奖)B360基于Arcpy与SVM的滑坡易发性评价

此外,在ArcGIS平台下,“易发性图预测(多进程)”工具的运行时间为2h 48m 3s,“易发性图预测(单进程)”工具的运行时间为5h 19m 27s,运行时间缩短了近2h 31m 24s,运行效率提高了47.39%。在ArcGIS Pro平台下,“易发性图预测(多进程)”工具的运行时间为20m 12s,“易发性图预测(单进程)”工具的运行时间为1h 26m 47s,将运行时间缩短了近1h 6m 35s,运行效率提高了76.72%。滑坡的发生受各种影响因素的影响,目前,影响因素的选择没有一个统一的标准。

2301_77310370的博客 1467

MongoDB五种树形结构表示法

MongoDB五种树形结构表示法 MongoDB五种树形结构表示法 第一种:父链接结构 db.categories.insert( { _id: "MongoDB", parent: "Databases" } ) db.categories.insert( { _id: "dbm", parent: "Databases" } ) db.categori...

diaowojian9497的博客 1009

ADS1299寄存器配置与应用实战指南

本文提供了ADS1299高精度生物电信号采集芯片的寄存器配置与应用实战指南。详细解析了采样率、增益、转换模式等核心寄存器的设置方法,并分享了数据读取、高级功能配置及常见问题的调试心得,帮助开发者快速掌握ADS1299的配置技巧,实现稳定的ECG/EEG信号采集。

weixin_28278377的博客 194

Mongodb 数据存储是 B+ TREE 还是 B TREE

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(接近700人左右 1 + 2)。前一段被问及MOGNODB 到底是 B+TREE 还是 B TREE ,这个问题根据之前的记忆是 BTREE ,而...

sql server的专栏 457

2023-2024深度学习框架之争——选pytorch还是tensorflow?

深度学习是人工智能领域的一个重要分支,它利用多层神经网络来模拟人类的学习和推理能力,解决各种复杂的问题,如图像识别、自然语言处理、语音识别、推荐系统等。深度学习框架是一种软件工具,它提供了构建、训练、测试和部署深度学习模型的便利,使得开发者和研究者可以更高效地进行深度学习的开发和应用。目前,市场上有许多不同的深度学习框架,如PyTorch、TensorFlow、Keras、MXNet、Caffe2等,它们各有优劣,适用于不同的场景和需求。

flchen_nchu的博客 6757

三极管开关电路在脉冲应用中的性能瓶颈分析

深入探讨三极管开关电路在高频脉冲场景下的响应延迟与功耗问题,揭示其性能限制的关键因素。结合实际应用,分析开关速度与信号完整性之间的矛盾,为优化三极管开关电路设计提供实用参考。

weixin_42602368的博客 588

MongoDB 嵌套数组(数组内套数组)查询(query,select)和修改(update)

今天遇到一个特别奇葩的文档,之前的同事干了一件极为愚蠢的事情,他把N条对象放进一个数组,把多个数组放进一条文档内,整个集合内就一条文档,文档内部的这个数组内有数条数据,每次更新和查询都要对这个数组内部做一次条件查询,非常麻烦。最麻烦的地方在于,内部数组内还嵌套有数组,嵌套数组内还有对象。怎么搞定查询和更新数组的数组内的对象值呢?怎么办? 文档"test"的最简实例结构如下: { "_id" :"1", "arr1" : { "_id" : "1", "a...

hellwhisper的专栏 2631

ADS 2013安装教程

1.2013和2014安装过程是一样的,运行ads2013_06_shp_windows文件进行安装 2.点击“NEXT”。 3.选择I accept,然后点击“NEXT”。 4.选择“complete”,然后点击“NEXT”。 5.选择安装路径,最好默认安装路径,安装路径不要有中文,然后点击“NEXT”。 6.点击“NEXT”. 7.如下路径默认安装,然后点击“NEXT”。 8.点击“NEXT”。 ...

谢谢关注“小鱼教你模数电”,各平台同号 6009

深入探究MongoDB与MySQL的树结构选择:B树与B+树,解析其差异与权衡

(1)B树每个节点即保存数据又保存索引,所以每一节点特别大,这一层所有节点加起来数据量将非常大。还有一点,B+树只有叶子节点保存数据,所以每一节点比较小,每一层所有节点加起来数据量也相对比较小。上面解释了不使用的原因,我们再来看为什么Mysql使用B+树,而MongoDB使用B树,想要解释原因,我们还必须要了解一下MongoDB和Mysql的基本概念。很明显,我们想向弄清楚原因就要知道B树和B+树的区别。这俩区别的核心如果你能看懂B-树和B+树的区别就很容易理解。一、B树和B+树的区别。

资料免费分享,点击名片 252

HyperLynx(十四)高级分析技术

如果没有查找到该模型,可使用菜单命令“Setup”→“Options”→“Directories”,打开“Set Directories”对话框,单击“Edit”按钮,在“Select Directories for IC-Model Files”对话框中将路径“…在“Assign Models”对话框中的“Port”栏找到“OUTM”端口,在其对应的“Circuit Connection”栏中选择“txout”项。将端口R75连接到“Gnd”。同样,将“EMP”连接到“V”,完成预加重设置。...

小幽余生不加糖 4951

【微服务】SpringBoot 对接飞书审批流程使用详解

SpringBoot 对接飞书审批流程使用详解

congge_study的博客 3771

Storing_TreeView_Structures_WithMongoDB:存储树形结构数据的 MongoDB 实践方案

Storing_TreeView_Structures_WithMongoDB:存储树形结构数据的 MongoDB 实践方案 在当今的开发实践中,树形结构数据的应用极为广泛,无论是各类分类体系还是网站结构,都离不开对层次关系的建模。本文将介绍一个开源项目 Storing_TreeView_Structures_WithMongoDB,该项目展示了如何在 NoSQL 数据库 MongoDB 中操作树...

gitblog_00465的博客 393

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构

本文记录的是基于RepVit的YOLOv11轻量化改进方法研究。RepVit的网络结构借鉴ViT的设计理念,通过分离的token mixe和减少推理时的计算和内存成本,同时减少扩展比率并增加宽度,降低延迟,并通过来弥补参数大幅减少的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和五种模型,以满足不同的需求。

Limiiiing的博客 2977

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MongoDB小课堂: 数据模型设计从基础到实战——文档结构、关系表达与树形建模深度指南

本文系统介绍了MongoDB数据建模的核心策略。首先对比了内嵌式与规范式两种基础结构的特点和适用场景,指出内嵌式适合读多场景,规范式适合写多场景。然后详细讲解了一对一和一对多关系的具体建模方法,强调子项数量是选择内嵌数组或引用式数组的关键因素。最后深入分析了五种树形结构建模方案(父引用、子引用、祖先路径、物化路径、左右值编码),通过对比图表展示不同方案的适用场景。全文贯穿性能优化思想,为开发者构建高效MongoDB架构提供了实用指导。

Wang的专栏 709

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mongodb树形结构

    在mongodb中有多种方式来存储属性结构的数据。     1 通过子文档关联父文档 { "_id": 1, "name": "子节点", "parents": ["父节点1","父节点2"] }     2 通过父节点关联子节点 { "_id": 1, "name": "父节点",

hello world 5016

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java处理数据,输出树形结构

java处理数据,输出树形结构 mongo数据库表数据结构,如下 java类处理方法 package com.necibook.resource.model.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.apache.commons.lang.StringUtils; import java.util.*; /** * @author lbx * @date 2020-08-2

lbx 2689

Java一个表树形结构大类数据,java处理数据,输出树形结构

java处理数据,输出树形结构java处理数据,输出树形结构[var1]mongo数据库表数据结构,如下java类处理方法package com.necibook.resource.model.vo;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import org.apache.commons.lang.Str...

weixin_32154667的博客 340

mysql path enumerations tree_树形结构查询(使用树形结构的数据模型是)

树形结构查询(使用树形结构的数据模型是)2020-07-24 12:00:45共10个回答树形结构的话按照算法分析的原理,是先查询父节点,然后查询器父节点的左子树(也就是句柄)然后在查询句柄的句柄..还有你的问题我不清楚,你到底是想问什么..你可以看看算法分析下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法.1.合理使用索引索引是数据库中重要的数据结构,它的根本目的就是为了提高...

weixin_39904522的博客 748

四种树形结构存储方案对比与实战优化

树形数据结构是计算机科学中的基础概念,广泛应用于文件系统、组织架构等场景。其核心原理是通过父子节点关系构建层次化数据模型,在数据库存储时需要特殊处理以保证查询效率。常见实现方案包括邻接表、路径枚举、嵌套集等关系型方案,以及文档数据库等NoSQL方案。从技术价值看,不同方案在查询性能、写入速度、事务支持等方面各有优劣,例如路径枚举法以空间换时间显著提升查询效率,而MongoDB的文档模型则天然适合分布式环境。在实际工程应用中,需要根据业务特点进行选型,如电商分类系统可能侧重查询性能,而实时协作工具更关注写入速

weixin_30550081的博客 486

mongodb常用操作方法

成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。输入help可以看到基本操作命令,只是MongoDB没有创建数据库的命令,但有类似的命令 如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一...

diaowojian9497的博客 97

MongoDB与Pymongo深度实践:从基础概念到无限级评论应用示例

随着数据量的爆炸性增长,高效的数据存储与管理成为关键。MongoDB,作为NoSQL数据库的佼佼者,凭借其灵活的文档模型、高可扩展性和强大的查询能力,赢得了广泛关注。本博客将深入浅出地介绍MongoDB的基本概念、核心操作及实际应用,从基础概念到Docker安装,再到pymongo的使用,最后通过无限级评论功能展示MongoDB在项目开发中的实际应用。MongoDB是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

啊猪是的读来过倒的博客 3621
上一篇: Mongodb模式设计
下一篇: kafka同步到Elasticsearch
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值