MongoDB 如何实现嵌套子文档分组「建议收藏」

MongoDB 如何实现嵌套子文档分组「建议收藏」MongoDB 嵌套结构的数据非常常见, 它通过嵌套子文档,达到一对多的关联关系。但嵌套结构中按分类分组求子文档的数据计算,不能直接通过 $group 聚集运算来实现,需要将嵌套结构解开,由多层嵌套…

MongoDB 如何实现嵌套子文档分组

 MongoDB 嵌套结构的数据非常常见, 它通过嵌套子文档,达到一对多的关联关系。但嵌套结构中按分类分组求子文档的数据计算,不能直接通过 $group 聚集运算来实现,需要将嵌套结构解开,由多层嵌套结构变成多条单层结构来计算,由于中间过程的处理,且还要借且其它函数辅助实现输出。下面以集合 order 为例说明,按 category 分组获取 term 的数量并按由大到小的顺序输出。

[
 { category: “movies”,
   terms: [{ term: “movie 1”, total: 1000}, {term: “movie 2”, total: 100}  ]
 },
 { category: “sports”,
   terms: [{ term: “football 1”, total: 1000}, {term: “tennis 2”, total: 120}  ]
 },
 { category: “movies”,
   terms: [{ term: “movie 1”, total: 5000}, {term: “movie 2”, total: 200},
 {term: “movie 3”, total: 280}  ]
 },
 { category: “sports”,
   terms: [{ term: “football 1”, total: 4000}, {term: “tennis 2”, total: 250},
{term: “tennis 2”, total: 450}  ]
 },

]

MongoDB通过聚集运算 aggregate,group 实现如下:
    db.order.aggregate([
   {$unwind : “$terms”},
   { $group : { _id : {
            category: “$category”,
            term: “$terms.term” },
            total: {$sum : “$terms.total”}
            }
   },
   {$sort : { total : -1} },
   { $project: {
            _id: 0,
            category: “$_id.category”,
            term: “$_id.term”,
            total:1}}
])

      $unwind将 terms数组拆分成多条, 再由 $group 分组、求和、排序后,最后用 $project过滤字段输出。

      如果有集算器协助 MongoDB,就不需要这么繁琐的组合运算:

  A
1 =mongo_open(“mongodb://127.0.0.1:27017/raqdb”)
2 =mongo_shell(A1,”order.find()”).fetch()
3 =A2.conj(terms.derive(A2.category))
4 =A5.group(category,term;~.sum(total):total).sort(-total)
5 >A1.close()

      集算器 SPL 不仅对解决嵌套分组,对 MongoDB 很多困难的计算都有帮助,可以参考《 辅助 MongoDB 计算》。
      SPL 也能很方便地嵌入到 JAVA 应用,可参考 《Java 如何调用 SPL 脚本》

      具体使用方法可参考《如何使用集算器》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8204.html

(0)
上一篇 2023-03-05
下一篇 2023-03-05

相关推荐

  • oracle大小写转换函数_Oracle大小写

    oracle大小写转换函数_Oracle大小写Oracle实现金额小写转大写函数 今天工作的时候遇到了,然后上网百度了一下,发现了有个大佬写了一个很牛的函数,在此记录下来。 原文:http://www.itpub.net/thread-24028

    2023-06-05
    145
  • Python二进制

    Python二进制在计算机科学中,二进制是一种用于数字表示和信息处理的方法,用2个数字0和1来表示。Python作为一种高级编程语言,天然支持二进制表示,因此Python的二进制编程也具有高度的可读性和易用性。本文将介绍一些Python中用于处理二进制数据的函数和方法,并探讨如何使用Python进行二进制编程。

    2024-06-08
    53
  • 使用Python生成PDF

    使用Python生成PDF在Web应用程序开发过程中,经常需要生成PDF文档,以便客户可以下载或打印信息。Python提供了几个流行的库来生成PDF文件,包括PyPDF2、ReportLab和WeasyPrint。在这篇文章中,我们将探讨如何使用Python生成PDF。

    2024-09-13
    26
  • mysql 查询本月、本周、今日、昨日数据「终于解决」

    mysql 查询本月、本周、今日、昨日数据「终于解决」created_at 类型为 timestamp — SELECT COUNT(1) FROM lara_orders WHERE MONTHNAME(created_at)=MONTHNAME(…

    2023-03-28
    162
  • mongodb intellishell studio 3T shell 操作[通俗易懂]

    mongodb intellishell studio 3T shell 操作[通俗易懂]当需要在mongo中多表查询或者关联查询并导出结果当时候,可以用类似script语法。 特别注意的是,如果采用3T的导出操作export,只有最后语句是查询语句才能导出 var ids = [] d…

    2023-03-05
    171
  • Python字典追加操作方法

    Python字典追加操作方法在Python中,字典是一种非常方便的数据类型,它可以用于存储键值对。字典的特点在于可以高效的找到一个键对应的值。Python中的字典是可变的,因此你可以向字典中添加或者删除元素,字典的追加操作是Python中使用频率非常高的操作之一。在本文中,我们将深入介绍Python字典追加操作方法,帮助开发者更好地理解和应用Python字典。

    2024-06-09
    58
  • 大数据技术栈,主要有哪些[亲测有效]

    大数据技术栈,主要有哪些[亲测有效]往大数据方向发展需要学哪些技术?网上一搜真是指不胜屈。对于小白来说,实在是一头雾水,到底哪些是当下流行的?哪些是必须要先学会的?流行?主次搞不清。为了解决这些疑惑,羚羊专门花了些时间, 挨个技术去研究

    2023-03-11
    140
  • python简介及linux的简单介绍

    python简介及linux的简单介绍优点:Python是一种代表简单主义思想的语言,阅读一个良好的Python程序就感觉像是在读英语一样,使你能够专注于解决问题而不是去搞明白语言本身;

    2023-11-24
    130

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注