$在mongodb查询中分别展开2个字段

2024-03-22

我想要$unwind2 个字段,school and home。 数据库结构就像;

{ 
    "id" : 1,
    "school" : [
        {
            "path" : "school1", 
            "code" : "code1", 
        }, 
        {
            "path" : "school2", 
            "code" : "code2", 
        }, 
        {
            "path" : "school3", 
            "code" : "code3",
        }, 
        {
            "path" : "school4", 
            "code" : "code4",
        } 
    ], 
    "home" : [
         {
            "path" : "home1", 
            "code" : "homeCode1",
        }, 
        {
            "path" : "home2", 
            "code" : "homeCode2",
        }, 
    ]
}

我想要$unwind school and home字段并将它们中的每一个设为;

{ 
    "id" : 1,
    "school" : [
        {
            "path" : "school1", 
            "code" : "code1", 
        }
},
{ 
    "id" : 1,
    "school" : [
       {
            "path" : "school2", 
            "code" : "code2", 
        }
},
{ 
    "id" : 1,
    "school" : [
       {
            "path" : "school3", 
            "code" : "code3", 
        }
},
{ 
    "id" : 1,
    "school" : [
       {
            "path" : "school4", 
            "code" : "code4", 
        }
},
{ 
    "id" : 1,
    "home" : [
       {
            "path" : "home1", 
            "code" : "homeCode1", 
        }
},
{ 
    "id" : 1,
    "home" : [
       {
            "path" : "home2", 
            "code" : "homeCode2", 
        }
}   

我编写的旨在获取上述格式的查询是;

db.collection.aggregate([
    {$unwind: "$school"},
    {$unwind: "$home"}
]).pretty()

But the query结果成对;

{
    "id" : 1,
    "school" : {
        "path" : "school1",
        "code" : "code1"
    },
    "home" : {
        "path" : "home1",
        "code" : "homeCode1"
    }
}
{
    "id" : 1,
    "school" : {
        "path" : "school1",
        "code" : "code1"
    },
    "home" : {
        "path" : "home2",
        "code" : "homeCode2"
    }
}
{
    "id" : 1,
    "school" : {
        "path" : "school2",
        "code" : "code2"
    },
    "home" : {
        "path" : "home1",
        "code" : "homeCode1"
    }
}
{
    "id" : 1,
    "school" : {
        "path" : "school2",
        "code" : "code2"
    },
    "home" : {
        "path" : "home2",
        "code" : "homeCode2"
    }
}
{
    "id" : 1,
    "school" : {
        "path" : "school3",
        "code" : "code3"
    },
    "home" : {
        "path" : "home1",
        "code" : "homeCode1"
    }
}
{
    "id" : 1,
    "school" : {
        "path" : "school3",
        "code" : "code3"
    },
    "home" : {
        "path" : "home2",
        "code" : "homeCode2"
    }
}
{
    "id" : 1,
    "school" : {
        "path" : "school4",
        "code" : "code4"
    },
    "home" : {
        "path" : "home1",
        "code" : "homeCode1"
    }
}
{
    "id" : 1,
    "school" : {
        "path" : "school4",
        "code" : "code4"
    },
    "home" : {
        "path" : "home2",
        "code" : "homeCode2"
    }
}

我怎么能够$unwind两个字段分开,而不是这个结果对格式?


这不是直接可能的。 MongoDB 3.4 有一个可能的解决方法。$facet可用于在同一文档的单个阶段中执行多组管道操作。它对您的案例很有用。

db.collection.aggregate({
    '$facet': {
        'school': [{
            '$unwind': '$school'
        }, {
            '$project': {
                _id: '1',
                school: 1
            }
        }],
        'home': [{
            '$unwind': '$home'
        }, {
            '$project': {
                _id: '1',
                home: 1
            }
        }]
    }
}, {
    '$project': {
        'schoolAndHome': {
            '$setUnion': ['$school', '$home']
        }
    }
}, {
    '$unwind': '$schoolAndHome'
}, {
    '$replaceRoot': {
        'newRoot': '$schoolAndHome'
    }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$在mongodb查询中分别展开2个字段 的相关文章

随机推荐

  • 在 IE 请求中设置 AJAX 内容类型标头

    从 Internet Explorer 发送跨域 jquery ajax http 请求时 是否可以将 http 内容类型请求标头设置为 application json 我们正在尝试使用 REST WCF 服务 该服务在格式化响应时解释请
  • 是否可以将 MPMoviePlayerController 静音?

    在我的 iPhone 应用程序中 我想要静音和取消静音 MPMoviePlayerController 我进行了很多搜索 但无法成功 是否可以在 MPMoviePlayer 控制器中将音频静音 请帮帮我 提前致谢 MPMusicPlayer
  • 如何使用 TYPO3 extbase Fluid 正确输出 DateTime

    我在数据库中存储了两个 dateTime 对象 2014 11 03 09 00 00 2014 10 21 13 45 00 当我尝试使用 ViewHelper format date 输出它们时
  • 无服务器 - 如何将多个文件添加到 iamRoleStatements?

    In my serverless yml文件 我希望能够添加iamRoleStatements来自两个不同的文件 这不能改变 所以我尝试这样做 provider iamRoleStatements file environments yml
  • 在 Django 中注释 SUM 聚合函数导致“None”值

    正在做我的第一个真正的 Django 项目 需要指导 背景 我的项目是一个 reddit 克隆 用户提交链接 文本 访客投赞成票或反对票 有一个社交排名算法 作为后台脚本每约 2 分钟运行一次 根据净投票和内容的新鲜度对所有提交的内容重新排
  • 在列表上循环并删除[重复]

    这个问题在这里已经有答案了 for String fruit list if banane equals fruit list remove fruit System out println fruit 这里是一个带有删除指令的循环 在执行
  • FullCalendar 和 django

    我想在我的 django 项目中使用 fullcalendar jquery 插件 我有一个入门型号 class Entry models Model date models DatetimeField 它只有一个日期属性 我知道 full
  • 在另一台计算机上运行我的 Asp.Net Web 应用程序

    我如何在另一台计算机上运行我的应用程序 我的团队成员想要在他的计算机上查看网页 他不想安装 Visual Studio 只是想在浏览器中查看网页 我使用的是 Macbook 将其发布到 Web 服务器 或者让他在自己的计算机上安装 IIS
  • Apple MDM 推送错误,但仅限于某些 iOS 设备

    我们在某些 iPhone 设备上使用 MDMpush 时遇到错误 7 月 30 日 17 52 46 Mirnas iPhone apsd 49 发生流错误 错误 Domain NSPOSIXErrorDomain Code 54 操作无法
  • 检查 PHP 中的字符串是否序列化

    我正在为我的应用程序构建 Redis DB 缓存层 并且已经到了要处理数组的地步 我想知道是否有任何好的 高性能 方法来控制 PHP 中的字符串是否被序列化 多谢 array unserialize string if array fals
  • 如何解决因APK文件无效而安装失败的问题?

    我正在尝试构建 Dolphin Player 但我收到了错误 2012 09 21 09 46 23 DolphinPlayer Installation failed due to invalid APK file 2012 09 21
  • std::string 在 std::cin 的 4095 个字符后被截断

    我的程序需要从 stdin 读取最多 50k 个字符长的字符串 代码如下 include
  • 使用 API 17 渲染时 Android 按钮文本不居中

    在布局的图形视图中 当我从下图所示的按钮中选择 API 15 或更低版本时 圆圈按钮中的文本看起来不错 当我选择 API 17 时 即使 xml 代码相同 文本也会被替换 更改按钮填充没有帮助 这只是 Eclipse 的问题还是 Andro
  • 在 OpenGL 中快速绘制多个相同的对象

    所以我正在开发一款游戏 我需要绘制很多相同的对象 相同的形状 相同的大小 相同的颜色 只是位置不同 现在我的设置是这样的 我有一些课Renderer想要在屏幕上绘制的对象可以调用static void addVertex float x f
  • Spring框架中子文档数组字段中的过滤数组

    我正在尝试从 Spring 框架项目中的 MongoDB 数组中获取元素 我已经找到了MongoDB shell的解决方案 但我不知道如何通过Spring data core aggregation实现它 Spring不支持聚合运算符之一
  • Dlib面部标志起始指数

    我正在使用 dlib 来获取面部标志点 我的问题是关于 索引 68 个地标的参考图是从 1 开始的 是dlib代码Dlib 面部标志 https github com davisking dlib blob master examples
  • Python 多重处理和组合 DF

    我正在将一个大数据源读入 pandas 并将其分成 3 个块 我想使用多重处理 以便我可以同时完成每个块的分析功能 每个函数之后的输出是一个数据帧 然后我需要组合这三个小数据框 This part creates an empty data
  • 如何将导航栏存储在一个文件中?

    我的网站有一个导航栏 div ul li a href index html Home a li li a href about html About Us a li li a href http www brownpapertickets
  • Web 部署 3 (IIS) 的自动备份 - 在备份中排除文件夹

    我已成功通过以下方式设置 Web 部署自动备份本指南 http www iis net learn publish using web deploy web deploy automatic backups 效果很好 但是 在我的网站中 我
  • $在mongodb查询中分别展开2个字段

    我想要 unwind2 个字段 school and home 数据库结构就像 id 1 school path school1 code code1 path school2 code code2 path school3 code co