`

利用mongodb聚合操作$graphLookup实现递归

 
阅读更多

     以前经常适用关系型数据库存储父子级联数据,比如一个菜单下面可能有子菜单,上面可能有父级菜单。实际上就是一种单表自关联结构,通过在当前记录中设置parentId指向父记录的id来实现递归。

     在mongodb中可以利用聚合+$graphLookup表达式+$match表达式+管道(pipeline)来实现类似操作,具体用一个例子来说明:

   1. 场景:员工的报告关系(reportingTo),比如程序员向组长报告,组长向经理报告,经理向分管副总报告。。。,可以形成一个递归的层级关系保存在一个collection里,mongodb数据如下:

{ "_id" : 1, "name" : "Dev" }
{ "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" }
{ "_id" : 3, "name" : "Ron", "reportsTo" : "Eliot" }
{ "_id" : 4, "name" : "Andrew", "reportsTo" : "Eliot" }
{ "_id" : 5, "name" : "Asya", "reportsTo" : "Ron" }
{ "_id" : 6, "name" : "Dan", "reportsTo" : "Andrew" }

 

2. 实现代码:

 db.employees.aggregate([{$match: { name: 'Dan' }},{$graphLookup:{from: "employees",startWith:"$reportsTo",connectFromField:"reportsTo",connectToField:"name",as:"报告层级"}}])

 

输出结果如下:

{ "_id" : 6, "name" : "Dan", "reportsTo" : "Andrew", "报告层级" : [ { "_id" : 1, "name" : "Dev" }, { "_id" : 2, "name" : "Eliot", "reportsTo" : "Dev" }, { "_id" : 4, "name" : "Andrew", "reportsTo" : "Eliot" } ] }

 

 

 

分享到:
评论

相关推荐

    11、MongoDB聚合操作及索引使用详解-ev.rar

    11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar...

    MongoDB聚合操作详细步骤.pdf

    MongoDB中的聚合框架是一个强大且灵活的数据处理工具,它允许用户对存储在数据库中的数据执行各种操作,从简单的数据聚合到复杂的文本处理和数组操作等。 聚合框架的主要组成部分是管道(pipeline),它由多个处理...

    MongoDB 聚合管道(Aggregation Pipeline)

    在MongoDB中,聚合管道由多个操作符(Operator)组成,每个操作符表示一个特定的功能节点。以下是一些常用的聚合管道操作符: 1. $match:用于过滤文档,类似于SQL中的WHERE子句。$match操作符将只允许满足条件的...

    Mongodb聚合

    通过一系列的管道操作(pipeline stages),可以实现对数据集进行筛选、分组、计算等操作。在 MongoDB 2.2 版本之后引入了聚合框架,这为开发者提供了更高效的数据处理方式。 #### 聚合管道(Pipeline)概念 聚合...

    MongoDB 中聚合统计计算–$SUM表达式

    以上两种情况的聚合统计,分别对应与聚合框架中的 $group 操作步骤和 $project 操作步骤。 1.$group 直接看例子吧。 Case 1 测试集合mycol中的数据如下: { title: 'MongoDB Overview', description: 'MongoDB is...

    深入解析MongoDB聚合与索引:提升数据库效能的关键策略

    此外,还有其他高级聚合操作,如`$bucket`(桶划分)用于数据分区,`$unwind`(拆解数组)用于处理嵌套文档,以及`$graphLookup`(图查找)用于遍历关联关系。 **二、MongoDB索引** 索引是提升MongoDB查询性能的...

    MongoDB聚合实战:数据分析与财务应用轻松入门

    本书“MongoDB 聚合实战:数据分析与财务应用轻松入门”是为初学者和专业人士设计的一份指南,旨在帮助读者快速理解并应用 MongoDB 的聚合功能。 在第一部分,书中介绍了 MongoDB 的基础知识。从聚合的魅力开始,...

    JAVA mongodb 聚合几种查询方式详解

    在 JAVA 中使用 MongoDB 时,通常使用 Spring Data MongoDB 框架来实现聚合查询。在本文中,我们将详细介绍 JAVA 中使用 MongoDB 的聚合查询方式。 BasicDBObject 聚合查询 在使用 BasicDBObject 实现聚合查询时,...

    MongoDB聚合分组取第一条记录的案例与实现方法

    这个任务在MongoDB中可以通过聚合框架(`aggregate`)来实现。 首先,我们了解数据记录的格式。记录包含了多个字段,如 `_id`、`_class`、`resourceUrl`、`refererDomain`、`resourceType`、`ip`、`createTime` 和 `...

    spring data mongodb 聚合 管道

    总的来说,Spring Data MongoDB的聚合功能使得开发者能够轻松地在Java代码中实现复杂的数据分析操作,与MongoDB的原生聚合框架无缝对接,提升了开发效率。通过理解这些基本的聚合操作,你可以构建出适应各种业务需求...

    mongodb聚合学习使用文档.txt

    mongodb聚合学习使用文档

    mongodb exception: $concat only supports strings, not NumberInt32解决办法

    MongoDB 提供了 `$substr` 函数来实现这个目标。`$substr` 接受三个参数:要提取子字符串的字符串、起始位置和长度。我们可以使用 `$substr` 将数字转换为字符串,然后与字符串进行连接: ```javascript { 'fdate'...

    MongoDB聚合框架:数据转换与分析的强大工具

    3. **高性能**:MongoDB优化了读写操作,提供了高性能的数据访问,特别是在处理大量的读写操作时。 4. **高可用性**:通过副本集(Replica Sets)实现,副本集是一组维护相同数据集的MongoDB服务器,可以提供数据的...

    MongoDB聚合操作

    聚合操作案例2-资源

    java实现mongodb数据库的操作

    本资料将深入讲解如何使用Java实现对MongoDB数据库的操作。 一、MongoDB简介 MongoDB是一个基于分布式文件存储的NoSQL数据库,它摒弃了传统的关系型数据库模型,采用JSON(JavaScript Object Notation)格式的文档...

    Mongodb聚合函数count、distinct、group如何实现数据聚合操作

    上篇文章给大家介绍了Mongodb中MapReduce实现数据聚合方法详解,我们提到过Mongodb中进行数据聚合操作的一种方式——MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce来进行操作。在这边文章中,...

    MongoDB教程之聚合(count、distinct和group)

    在进行数据处理时,除了基本的查询操作,MongoDB 还提供了聚合框架,它允许用户执行更复杂的分析任务,比如统计、分组和数据转换。在本教程中,我们将深入探讨MongoDB中的三个关键聚合操作:`count`、`distinct`和`...

    MongoDB3.2

    2. **聚合框架增强**:聚合框架得到显著增强,支持了更多的聚合阶段,例如`$bucketAuto`用于动态分桶,`$graphLookup`进行图遍历操作,提高了数据分析的效率。 3. **索引增强**:3.2版本引入了`$**`全局文本索引,...

Global site tag (gtag.js) - Google Analytics