Mongodb递归查询

2024-02-16

我的中有以下架构taxon收藏 :

{ 
  "_id": 1, 
  "na": [ "root_1",
        "root_2",
        "root_3" ], 
  "pa": 1 
},{
  "_id": 2, 
  "na": [ "name_1", 
        "name_2", 
        "name_3"], 
  "pa": 1
},{
  "_id": 4, 
  "na": [ "otherName_1", 
        "otherName_2", 
        "otherName_3"],
  "pa": 2
}

每个文档通过父字段与另一个文档相关,父字段对应于_id它的父级。

我想执行递归搜索以获得以下结果:

{ "_id": 4, 
  "nameList": [ "otherName_1",
              "name_1",
              "root_1"]
} 

从具有一定的文档_id, 获取第一项na每个父级的数组,直到文档_id: 1到达了

我目前通过执行 X 查询(由父文档执行一个查询,这里是 3 个)来获得此结果,但我非常确定这可以使用单个查询来实现。我已经看过新的了$graphLookup https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/操作员,但无法按照我的方式进行操作......

是否可以使用 MongoDB 3.4.1 在单个查询中实现此目的?

Edit

我每次都会运行 50 个文档,因此最佳解决方案是将所有内容合并到一个查询中

例如,它看起来像

var listId = [ 4, 128, 553, 2728, ...];
var cursor = db.taxon.aggregate([
  {$match: 
     { _id: {$in: listId}}
  }, ...
)];  

并会输出:

[{ "_id": 4, 
  "nameList": [ "otherName_1",
              "name_1",
              "root_1"]
}, { "_id": 128, 
  "nameList": [ "some_other_ame_1",
              "some_name_1",
              "root_1"]
}, { "_id": 553, 
  "nameList": [ "last_other_ame_1",
              "last_name_1",
              "root_1"]
} ... ]

网上试试:mongoplayground.net/p/GFP-L03Ub0Y https://mongoplayground.net/p/Gfp-L03Ub0Y


您可以尝试下面的聚合。

Stages $match - $graphLookup - $project.

$reduce从每个元素中选取第一个元素$graphLookup nameList's na array.

db.taxon.aggregate([{
    $match: {
        _id: {
            $in: listId
        }
    }
}, {
    $graphLookup: {
        from: "taxon",
        startWith: "$_id",
        connectFromField: "pa",
        connectToField: "_id",
        as: "nameList"
    }
}, {
    $project: {
        nameList: {
            $reduce: {
                input: "$nameList",
                initialValue: [],
                in: {
                    "$concatArrays": ["$$value", {
                        $slice: ["$$this.na", 1]
                    }]
                }
            }
        }
    }
}])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongodb递归查询 的相关文章

  • 将 MongoDB 聚合 $lookup 限制为仅 1 个匹配项

    有两个合集 users and reports 我的目标是进行一个聚合 获取所有用户和每个用户user包括用户的金额last report 这是我当前的聚合 db users aggregate lookup from reports lo
  • mongodump“失败:错误选项:只能将单个集合转储到标准输出”

    mongodump out 不起作用 它给了我这条消息 失败 错误的选项 只能将单个集合转储到标准输出 会发生什么 因此 例外是不言自明的 如果您使用 out 它只能在标准输出上显示单个集合 所以我想知道你想达到什么目标 如果你想输出一个特
  • 迁移后Mongodb数据文件变小

    在我的第一台服务器上我得到 root prod du hs var lib mongodb 909G var lib mongodb 迁移后this带有 mongodump mongorestore 的数据库 在我的第二台服务器上我得到 r
  • Mongodb:$HINT 的性能影响

    我有一个使用复合索引并在 id 上排序的查询 复合索引在索引末尾有 id 它工作正常 直到我添加 gt我的查询的子句 IE 初始查询 db colletion find field1 blabla field2 blabla sort id
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • MongoRuntimeError:连接池已关闭

    我看到我的猫鼬池在插入数据之前似乎已关闭 因为在调用云集群中的猫鼬数据库时出现此错误 MongoRuntimeError Connection pool closed 但我正在等待所有的电话 所以我不确定为什么会看到这个问题 也许这与我定义
  • MAC-1 汇编递归

    如何在 MAC 1 汇编器中调用递归函数 在 C 中你会做类似的事情 int func int num if num 0 return 1 return num func num 1 我知道如何使用调用函数 CALL 以及如何将参数加载到堆
  • 将 MongoDb 同步到 ElasticSearch

    我正在寻找一种将 MongoDB 中的集合与 Elastic Search ES 同步的方法 目标是以 MongoDB 作为主要数据源 并使用 MongoDB 作为全文搜索引擎 我的项目的业务逻辑是用python写的 网上有多种方法可供选择
  • Morphia - 未在 dbObj 中找到定义的类

    我有一个相当有趣的问题 当尝试从 Mongo 实例加载模型时 Morphia 会抛出以下错误 22 17 13 WARN Class not found defined in dbObj java lang ClassNotFoundExc
  • 在节点中使用mongoosejs更新多条记录

    我在使用 mongoosejs 和 Node js 更新多个记录时遇到问题 由于某种原因 即使有多个匹配 我也只更新一条记录 我还注意到回调在 update 之后不会触发 我没有收到任何错误消息 这里发生了什么 Page find stat
  • 猫鼬模式创建

    我刚刚开始使用猫鼬 我有一个使用 mongoose 的创建脚本 它使用示例数据创建模式和数据库 现在我编写实际的应用程序 我是否需要在每次应用程序运行时创建架构对象 或者它是否已经以某种方式可用 换句话说 我是否需要在每个使用 mongoo
  • 如何检查Mongodb企业版是否正在使用

    如何查看是否使用的是mongodb企业版 有没有我可以查询的标志或属性 mongod version只返回版本 我最近在 MongoDB JIRA 上问了这个问题 回复如下 至少可以通过三种方法来确定您是否正在运行 Enterprise 我
  • Mongodb聚合框架:$group是否使用索引?

    我正在尝试使用聚合框架 match and group阶段 做 group阶段使用索引数据 我正在使用最新的可用 mongodb 版本 2 5 4 group不使用索引数据 来自 mongoDBdocs http docs mongodb
  • Spring Mongo Populator 一一

    我在 Kotlin 上使用 MongoDB 和 Spring 并且希望我的应用程序在启动时填充 MongoDB 集合 并在每次启动时清理 我的问题是 如果我填充的某些数据有问题 如何才能一一填充数据以便容错 my code Configur
  • Mongodb聚合,如何按间隔标准对文档进行计数?

    我的 MongoDB 文档如下所示 StatCode LoadTime 例如 数据可能如下所示 id StatCode LoadTime 1 200 0 345 2 200 0 234 3 200 0 396 4 200 1 234 5 2
  • 使用mongodb聚合框架按数组长度分组

    我有一个看起来像这样的集合 id id0 name saved things id id1 name saved things id id2 name saved things etc 我想使用 mongodb 的聚合框架来得出一个直方图结
  • 在 MongoDB 中查找 7 天前的记录

    我有一个包含对象的集合 如下所示 1 id ObjectId 551c6605e4c6ac495c923aab sender id ObjectId 551c6605e4c6ac495c923aac rep sender id 38 sen
  • Mongodb upsert 嵌入文档

    我每天每米有一份文件 如果它不存在 如何在数据数组中添加另一个子文档并创建整个文档 key 20120418 123456789 data Meter 123456789 Dt ISODate 2011 12 29T16 00 00 0Z
  • 检索 mongoDB 文档中的空数组或 null

    我有我学校所有学生的收藏 每个文档都有一个sports列出每个学生从事的运动的数组属性 但该属性可能显示为sports or sports null或者根本不出现 如何检索属于上述三种情况之一的所有文件 如何向只有一项运动但未表示为数组的学
  • Python递归限制与堆栈大小?

    我了解递归中每个递归调用如何堆栈在堆栈上 如果超出堆栈限制 则会出现堆栈溢出 那么为什么Python的sys getrecursionlimit 返回一个数字 递归调用的最大深度 这不取决于我在该递归函数中所做的事情吗 或者它是否以某种方式

随机推荐

  • 如何获取HTA窗口的大小?

    您可以设置 HTA 窗口的大小 但我找不到获取其大小的方法 我所能想到的就是读书document body offsetWidth and offsetHeight 但这些给你的是视口大小而不是实际的窗口大小 有可能知道吗 似乎没有属性或方
  • 退出临界区

    考虑多个线程同时执行以下代码 long gf 0 global variable or class member if InterlockedCompareExchange gf 1 0 0 lock cmpxchg some exclus
  • 重写 JS 中的赋值运算符

    var myObject myKey myValue typeof myObject myKey returns string myObject myKey newValue console log myObject myKey print
  • 如何在Python 3.x中强制输入整数? [复制]

    这个问题在这里已经有答案了 我正在尝试用 Python 编写一个程序 该程序接受输入以重复斐波那契数列的次数 i 1 timeNum input How many times do you want to repeat the sequen
  • 用 C++ 读/写设备

    如何用 C 读取 写入设备 该设备位于 dev ttyPA1 我考虑过 fstream 但我不知道设备是否具有我可以在不阻塞应用程序的情况下读取的输出 我的目标是创建一个应用程序 您可以在终端中写入一些内容 然后将其发送到 dev ttyP
  • 简单 SparkSQL 查询中未修剪分区

    我正在尝试从 SparkSQL 表 S3 中的 parquet 有效地选择各个分区 但是 我看到 Spark 打开表中所有 parquet 文件的证据 而不仅仅是那些通过过滤器的文件 对于具有大量分区的表来说 即使是小型查询也会变得昂贵 这
  • IOS Swift - 无法从地址簿中检索个人笔记

    有人有什么建议为什么我可以获得名字 姓氏和生日 但是我无法检索从 iphone 通讯录中提交的笔记吗 准备工作 已授予地址簿访问权限 添加到地址簿中的人员包含所有字段 包括注释 当前结果 nil 仅用于注释 所有其他字段均已正确检索 使用的
  • Firebase 中如何计算连接

    连接数是如何计算的 假设我有一个 Web 应用程序 其中一个负载会向所有连接的客户端发送一条消息 假设我有 5 个连接的客户端 这是否意味着只要打开了 Web 应用程序的浏览器选项卡 它就会计为 1 个连接 这意味着我将有 6 个并发连接
  • 无法从groovy连接到oracle数据库

    您好 我无法连接到 groovy 中的 Oracle 数据库 我在 groovy 控制台中使用了以下代码 但出现以下编译错误 unable to resolve class oracle jdbc driver OracleTypes at
  • 找不到 ViewModel 的视图

    我有一个使用 Caliburn Micro 的 wpf 应用程序 我有一个视图 MyView
  • Python:没有名为“dash.development”的模块。 “dash”不是一个包

    我正在尝试运行这个 Dash 教程https github com cryptopotluck alpha vantage tutorial tree master dash bootstrap https github com crypt
  • R:如何相对于 x 轴分散(抖动)点?

    我在 R 中有以下代码片段 dat lt data frame cond factor rep A 10 rating c 1 2 3 4 6 6 7 8 9 10 ggplot dat aes x cond y rating geom b
  • 无法在 Visual Studio 2013 中显示 SQL Azure 表定义

    我收到的错误是 加载问题 设计器在加载表定义时遇到错误 我可以很好地查看VS内表中的数据 甚至还可以查询数据 这是我的计算机上的全新安装 我尝试过的 尝试在 服务器资源管理器 和 SQL Server 对象资源管理器 检查我的登录凭据是否有
  • 我应该使用什么标记来描述使用 schema.org 的社交媒体链接?

    我有一个地方 本地企业 其中有多个字段可以很好地映射到 schema org 条目 有一个字段我不确定如何标记 我们有该企业社交媒体帐户的链接 例如 Twitter 帐户 Facebook 页面和 Pinterest 帐户 这些应该如何在
  • Django:ModelChoiceField 删除默认--------- 选择

    如何从 ModelChoiceField 中删除默认的 选择 Use empty label None field2 forms ModelChoiceField queryset empty label None 请检查文档模型选择字段
  • 如何使用 SFINAE 检测 noexcept 方法

    我问的是一个 流行 问题的变体 检测类方法的存在 我在 SO 中读过很多答案 大多数 C 17 后 解决方案看起来像this https stackoverflow com questions 55191505 c compile time
  • 分发依赖于静态框架的动态框架的正确方法是什么?

    我正在构建一个闭源动态框架 它依赖于第三方闭源静态框架 我将静态依赖框架链接到我的框架的项目 目标 如中所述这个苹果技术说明 https developer apple com library content technotes tn243
  • 如何使用 RestClient 修复 Ruby 中的套接字错误?

    我在用RestClient在 ruby 类中进行网络调用 我得到了SocketError每当我没有连接到互联网时 我已经添加了一个救援块来捕获异常 但我仍然无法这样做 错误消息是 SocketError Failed to open TCP
  • 如何在不使用内置指令的情况下在 MIPS 汇编中实现乘法和除法?

    好吧 问题就在这里 我必须编写一个 MIPS 程序 从用户那里获取 2 个输入数字 然后 我必须编写一个代码来输出用户输入的 2 个数字的乘积 商和余数 现在 这非常简单 但是 我没有意识到我们不能在程序中使用乘法和除法操作数 现在我不知道
  • Mongodb递归查询

    我的中有以下架构taxon收藏 id 1 na root 1 root 2 root 3 pa 1 id 2 na name 1 name 2 name 3 pa 1 id 4 na otherName 1 otherName 2 othe