如何在嵌套子文档mongodb中查找带有数组的字段?

2023-12-25

我正在尝试检索文档中嵌入数组的一些查找数据。

以下是数据示例:

{
      "_id": "58a4fa0e24180825b05e14e9",
      "fullname": "Test User",
      "username": "testuser"
      "teamInfo": {
          "challenges": [
              {
                  "levelId": "5e14e958a4fa0",
                  "title": "test challenge 1.1"
              },
              {
                  "levelId": "5e14e958a4fa0",
                  "title": "test challenge 1.2"
              },
              {
                  "levelId": "5e14e958a4fa1",
                  "title": "test challenge 2.1"
              }
          ]
      }
}

如您所见,teamInfo.challenges 是一个数组,包含 levelId 字段。它们指向另一个称为级别的集合中的 _id 字段。

但是我怎样才能得到这样的 json 响应呢?

{
      "_id": "58a4fa0e24180825b05e14e9",
      "fullname": "Test User",
      "username": "testuser"
      "teamInfo": {
          "challenges": [
              {
                  "levelInfo": {
                      "name": "Level 1"
                  },
                  "title": "test challenge 1.1"
              },
              {
                  "levelInfo": {
                      "name": "Level 1"
                  },
                  "title": "test challenge 1.2"
              },
              {
                  "levelInfo": {
                      "name": "Level 2"
                  },
                  "title": "test challenge 2.1"
              }
          ]
      }
}

我正在尝试使用放松、项目和分组。但我很困惑。

const user = await User.aggregate([
                {
                    $match: {_id: new mongoose.Types.ObjectId(req.user.userId)}
                },
                {
                    $lookup: {
                        from: 'levels',
                        localField: 'teamInfo.challenges.levelId',
                        foreignField: '_id',
                        as: 'challLevelInfo'
                    }
                },
                {
                    $group: {
                        _id: "$_id",
                        ........IM CONFUSED HERE........
                    }
                }
]);

您可以使用查找管道来处理嵌套查找

const pipeline = [
   {
     $match: {_id: new mongoose.Types.ObjectId(req.user.userId)}
   },
   {
     $lookup: {
       from: 'levels',
       let: { level_id: "$teamInfo.challenges.levelId" },
       pipeline: [
         {
           $match: {
             $expr: {
               $eq: ["$_id", "$$level_id"]
             }
           }
         },
         {
           $lookup: {
             from: '<level collection>',
             localField: "levelId",
             foreignField: "_id",
             as: "levelInfo"
           }
         },
         {
           $project: {
             levelInfo: {
               name: "$levelInfo.name"
             }
             title: 1
           }
         }
       ],
       as: "challenges"
     },

   },
   { $project: {
     _id: 1,
     fullname: 1,
     username: 1,
     teamInfo: {
       challenges: "$challenges"
     }
   }}
]

const result = await User.Aggregate(pipeline)

希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在嵌套子文档mongodb中查找带有数组的字段? 的相关文章

随机推荐

  • 如何创建一个运算符来实现错误链?

    我想实现以下运算符 throwingFunction arg T doStuff if throwingFunction throws an error print or log the error else returns an obje
  • RecyclerView 与 ListView

    来自 Android 开发者 创建列表和卡片 http developer android com training material lists cards html RecyclerView 小部件是更高级 更灵活的版本 列表显示 好吧
  • 单击 wpf 中的按钮时播放 wav 声音

    我想在整个应用程序中通过按钮单击事件的单击事件来播放声音 我发现 1 个代码在单击按钮时播放声音 private void btn Click object sender RoutedEventArgs e MediaPlayer mpla
  • Java 中的 LRU 缓存,具有泛型和 O(1) 操作

    这是求职面试中经常出现的问题 这个想法是定义一个数据结构而不是使用Java内置的LinkedHashMap LRU 缓存会删除最近最少使用条目插入一个新条目 因此 考虑到以下场景 A B C D E 其中 A 是最近最少使用的项目 如果我们
  • 为什么谷歌浏览器提示“选择一个证书来验证自己的身份”

    我有一个应用程序在 Tomcat 服务器中运行 该服务器位于具有正确证书的 NginX 后面 当我尝试在 Mac OS X 中使用 Chrome 访问此应用程序时 浏览器中会弹出 选择一个证书来验证您自己的身份 我想避免这种情况 为此 我需
  • 如何使用 javascript 从字符串中删除 ¶

    这个问题在这里已经有答案了 我正在使用 diff api 工具创建一个很好的 diff 来显示更改的文本 我正在使用谷歌差异工具 https code google com archive p google diff match patch
  • 如何创建一个简单的基本单例?

    我的目的是创建一个单例 但不知道如何在 Rust 中处理这个 我读过this https stackoverflow com questions 27791532 how do i create a global mutable singl
  • Google 日历 API 400 响应

    我正在尝试在 Google Calendar API 上执行简单的忙闲查询 我的授权一切正常 可以查看用户日历列表等 当我尝试提交忙 闲查询时 我收到 400 错误 据我所知 根本没有关于它的详细信息不喜欢 无论是在我自己的代码中还是在我使
  • 我想使用 nlohmann:json 解析带有 msgpack 数据的 boost::beast::flat_buffer

    所以我使用 boost beast 作为 WebSocket 服务器 我想接收二进制消息并使用 nlohmann json 解析它 但是我收到一条错误消息 3 个重载都不能转换参数 nlohmann detail input adapter
  • 为什么aspnet_users使用guid作为id而不是递增int?帮助扩展用户领域的奖励积分

    为什么aspnet users使用guid作为id而不是递增int 还有什么理由不在其他表中使用它作为主键 这感觉有点奇怪 因为我知道我过去使用过的大多数应用程序都只使用普通的 int 系统 我也即将开始使用这个 id 来匹配额外的用户首选
  • 在不使用模型的情况下在球流中进行选择性索引

    我正在将bulbflow python 与Neo4j一起使用 并且我正在尝试添加索引only在我的键的子集上 目前 只是名为 name 的键 用于可选的基于索引的查找 我不喜欢球流模型 限制太多 并且我无法弄清楚如何在不更改代码的情况下进行
  • 为什么 SQL 中是 199.96 - 0 = 200?

    我有一些客户收到奇怪的账单 我能够隔离核心问题 SELECT 199 96 0 0 FLOOR CAST 1 0 AS DECIMAL 19 4 CAST 199 96 AS DECIMAL 19 4 200 what the SELECT
  • 使用 Rspec 选择单选按钮

    我目前正在使用 RSpec 编写一个表单测试 我想知道如何选择一个单选按钮 给出下面的表单 我希望我的测试看起来像这样 describe with valid options selected
  • 如何在Robot Framework中使用Webdriver管理器?

    在 selenium 中 我通过命令使用了 webdriver 管理器 driver webdriver Chrome Chromedrivermanager install 是否有用于机器人框架的网络驱动程序管理器 我希望 webdriv
  • 无需连续的 Try-Catch 块即可解析 JSON

    我想解析 JSON 但每次获得值时 我都必须将指令放入 try catch 块中 这是一个例子 try this setID jsonObject getLong id catch JSONException e try this setN
  • 解析请求正文中的 UTF8 字符时出现问题?

    在node js中实现HTTP服务时 有很多如下所示的示例代码用于获取整个请求实体 客户端上传的数据 例如带有JSON数据的POST var http require http var server http createServer fu
  • 带有 where 子句的 SQL MIN 函数

    这是我的项目表 Project Table JNo Name City J1 Proj1 London J2 Proj2 Paris J3 Proj3 Athens J4 Proj4 India 这是我的发货表 Shipment SNo P
  • 我如何检查 Ruby on Rails 中的当前时间是否在今晚晚上 9 点到明天上午 9 点之间

    我需要检查我当前的时间是否在指定的时间间隔 今晚 9 点到明天上午 9 点 之间 如何在 Ruby on Rails 中完成此操作 提前致谢 显然这是一个老问题 已经标有correct答案 但是 我想发布一个答案 可以帮助人们通过搜索找到相
  • BLOB 与文件系统

    虽然这个问题在过去的上一篇文章中已经出现过 但是不同的场景和不同的考虑决定了哪个是最好的 我需要实现一个系统 每年可以处理 200GB 400GB 大小的图像 每个图像大约 我正在考虑使用FILESYSTEM 因为它很容易对映像进行备份和恢
  • 如何在嵌套子文档mongodb中查找带有数组的字段?

    我正在尝试检索文档中嵌入数组的一些查找数据 以下是数据示例 id 58a4fa0e24180825b05e14e9 fullname Test User username testuser teamInfo challenges level