广告
返回顶部
首页 > 资讯 > 数据库 >整理最近用的Mongo查询语句
  • 837
分享到

整理最近用的Mongo查询语句

整理最近用的Mongo查询语句 2021-09-25 17:09:40 837人浏览 才女
摘要

整理最近正在用的多条件查询以及聚合查询的实例,作为文档保留供以后查阅 背景 最近做了几个规则逻辑。用到monGo查询比较多,就是查询交易信息跑既定规则筛选出交易商户,使用聚合管道进行统计和取出简单处理后的数据,用sql代替业务

整理最近用的Mongo查询语句

整理最近正在用的多条件查询以及聚合查询的实例,作为文档保留供以后查阅

背景

最近做了几个规则逻辑。用到monGo查询比较多,就是查询交易信息跑既定规则筛选出交易商户,使用聚合管道进行统计和取出简单处理后的数据,用sql代替业务代码逻辑的判断。

方法

mongoDB聚合使用aggregate,聚合管道采取自动向下子执行方式,基本语法格式:

db.COLLECTioN_NAME.aggregate(AGGREGATE_OPERATION)

聚合框架中常用的操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • (match:用于过滤数据,只输出符合条件的文档。)match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。
表达式 描述 实例
$sum 计算总和。 db.mycol.aggregate([{(group : {_id : ")by_user", num_tutorial : {(sum : ")likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{(group : {_id : ")by_user", num_tutorial : {(avg : ")likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{(group : {_id : ")by_user", num_tutorial : {(min : ")likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{(group : {_id : ")by_user", num_tutorial : {(max : ")likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{(group : {_id : ")by_user", url : {(push: ")url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{(group : {_id : ")by_user", url : {(addToSet : ")url"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{(group : {_id : ")by_user", first_url : {(first : ")url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{(group : {_id : ")by_user", last_url : {(last : ")url"}}}])

查询示例

示例一

部分字段说明:transAmt:交易金额,transType:交易类型,transTime:交易时间,mercNum:商户编号

查询交易信息,交易商户昨天交易笔数大于三百,交易金额累加大于三百万,这里现根据$match将交易信息筛选出来,然后使用$group根据商户编号分组,统计交易笔数和累加交易金额,将分组结果判断匹配交易笔数大于三百,交易金额大于三百万。

db.getCollection("box_order").aggregate([
  {
    $match: {
                "transTime":{$gte:ISODate("2020-01-03T00:00:00.000Z"),$lt:ISODate("2020-01-10T00:00:00.000Z")},
                "transType":"consume",
                "transStatus":{$in:["tsProcessing","success"]}
               }
  },
  {
    $group: {
                  "_id": "$mercNum",
                  "count": {"$sum": 1},
                  "totalAmt": {"$sum": "$transAmt"}
             }
  },
  {
    $match: {
                  "count": {"$gte": 300},
                  "totalAmt": {"$gte": 3000000}
                }
  }
])

示例二

部分字段说明:cardNo:交易卡号,transType:交易类型,transTime:交易时间,mercNum:商户编号

查询时间段内指定卡号下的交易商户信息。

根据卡号和交易时间将交易数据查出来,然后只显示商户号和卡号两列字段,根据商户号和卡号分组去重,再根据卡号分组,将商户号转化成一个字段变成数组。

db.getCollection("order_202011").aggregate([
  {
    "$match": {
      "detailInfo.cardNo": {
        "$in": [
          "YtCZ7KhCVG5xerKUg8bzJhVAjW/hWAWj",
          "cQ7QQ0yCVW6LhHtJNVRq2A==",
          "6KDpHMQ9s+0SQAGAUyLJ4A==",
          "cQ7QQ0yCVW7iSegn8uqIfg==",
          "ZEOcXdI4rfvswAz7dQ80hw==",
          "6KDpHmQ9s+2Nz61PPuOamw=="
        ]
      },
      "baseInfo.transTime": {
        "$gte": new Date(2020,10,01),
        "$lt": new Date(2020,10,24)
      }
    }
  },
  {
    "$project": {
      "merchantInfo.mercNum": 1,
      "detailInfo.cardNo": 1
    }
  },
  {
    "$group": {
      "_id": {
        "mercNum": "$merchantInfo.mercNum",
        "cardNo": "$detailInfo.cardNo"
      }
    }
  },
  {
    "$group": {
      "_id": "$_id.cardNo",
      "mercNums": {
        "$push": "$_id.mercNum"
      }
    }
  }
])

示例三

根据指定商户和其他条件查询交易信息,根据卡号分组并组装成一个字段的集合,最后筛选掉id只保留cardNos数组

db.getCollection("box_order_fxq_202104").aggregate([
    {
        "$match": {
            "mercNum": "M15201812030753174730",
			"transTime": {
				"$gte": ISODate("2021-04-17T16:00:00.000Z"),
				"$lt": ISODate("2021-04-18T16:00:00.000Z")
			},
            "mercLevel": {
                "$in": [
                    "C",
                    "D",
                    "E"
                ]
            },
            "payType": "POSPAY",
            "transType": "consume",
            "cardType": "2"
        }
    },
    {
        "$group": {
            "_id": null,
            "cardNos": {
                "$push": "$cardNo"  //$addToSet
            }
        }
    },
    {
        "$project":{
            "cardNos":1,"_id":0
        }
    }
])

查询结果:

{
    "cardNos" : [ 
        "n2IwHHhfEAJcm6RFsoNPcBVAjW/hWAWj", 
        "n2IwHHhfEAJcm6RFsoNPcBVAjW/hWAWj"
    ]
}

示例四

根据时间查询交易信息后,根据商户号分组,并将第一个交易信息存放入data字段中。(如果是需要全部的商户交易信息那么将$first修改为$push

db.getCollection("order").aggregate([
    {
        "$match": {
            "startTrxTime": {
                "$gte": ISODate("2021-07-20T16:00:00.000Z"),
                "$lt": ISODate("2021-07-21T16:00:00.000Z")
            }
        }
    },
    {
        "$group": {
            "_id": "$subMerchantNo",
            "data":{"$first": "$$ROOT"}  //$push
        }
    },
    {
        "$sort": {
            "_id": 1
        }
    }
])

尾言

最近那个到查询的大差不差,要注意的都是一些小改动,一般情况正常查就可以。后续有什么不一样的会继续补充。先到这里

您可能感兴趣的文档:

--结束END--

本文标题: 整理最近用的Mongo查询语句

本文链接: https://www.lsjlt.com/news/8589.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 整理最近用的Mongo查询语句
    整理最近正在用的多条件查询以及聚合查询的实例,作为文档保留供以后查阅 背景 最近做了几个规则逻辑。用到mongo查询比较多,就是查询交易信息跑既定规则筛选出交易商户,使用聚合管道进行统计和取出简单处理后的数据,用SQL代替业务...
    99+
    2021-09-25
    整理最近用的Mongo查询语句
  • thinkphp中的查询语句整理
    这篇文章主要讲解了“thinkphp中的查询语句整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkphp中的查询语句整理”吧! eq&n...
    99+
    2022-10-19
  • Mysql查询最近一条记录的sql语句(优化篇)
    下策——查询出结果后将时间排序后取第一条 select * from a where create_time<="2017-03-29 19:30:36" order by...
    99+
    2022-10-18
  • 基本的查询sql语句整理
    这篇文章主要介绍“基本的查询sql语句整理”,在日常操作中,相信很多人在基本的查询sql语句整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基本的查询sql语句整理”的疑惑...
    99+
    2022-10-18
  • MySQL模糊查询语句整理集合
    SQL模糊查询语句 一般模糊语句语法如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 ...
    99+
    2022-10-18
  • MySQL中数据查询语句整理大全
    目录一、基本概念(查询语句)①基本语句②条件查询1、普通查询2、去重查询(distinct)3、排序查询(order by)4、分组查询(group by)5.等值查询6.外连接查询7.内连接查询8.合并查询总结一、基本...
    99+
    2023-04-19
    mysql数据库命令 mysql查询语句格式 mysql简单查询语句
  • PGSQL查询最近N天的数据及SQL语句实现替换字段内容
    目录1、用SQL查询最近N天的数据2、用SQL语句实现替换字段里的内容3、SQL将查询结果赋值4、SQL查询字段内容为 NULL值时候赋值总结1、用SQL查询最近N天的数据 思路:先获取当前的时间,然后更具当前时间去减去...
    99+
    2023-03-06
    plsql查询当天数据 pgsql查询最近数据
  • Oracle常用的查询语句
    SELECT * from user_views where view_name='v$session';SELECT * FROM ALL_USERS where us...
    99+
    2022-10-18
  • Mysql整理二 - 常见查询语句面试题(附原表)
    表结构,创建原表的代码在最后 -- cid课程id; tid老师id; sid学生id;select * from t_mysql_course;select * from t_mysql_score;selec ...
    99+
    2023-09-04
    mysql 数据库
  • mysql dba常用的查询语句
    查看帮助命令 mysql> help; --总的帮助 mysql> help show; --查看show的帮助命令 mysql> help create;--查看create的帮助命令 ...
    99+
    2022-10-18
  • PGSQL怎么查询最近N天的数据及SQL语句实现替换字段内容的方法
    这篇“PGSQL怎么查询最近N天的数据及SQL语句实现替换字段内容的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收...
    99+
    2023-03-09
    pgsql sql
  • mysql常用的语句整理
    本篇内容主要讲解“mysql常用的语句整理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql常用的语句整理”吧! 1.复制表结构和数据,但是不复制索引和...
    99+
    2022-10-18
  • sql查询语句的使用示例
    了解sql查询语句的使用示例?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!sql查询语句:1、查看表结构【SQL>D...
    99+
    2022-10-18
  • 常用的SQL查询语句大全
    这篇文章主要讲解了“常用的SQL查询语句大全”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用的SQL查询语句大全”吧!一、基础1、说明:创建数据库CREA...
    99+
    2022-10-18
  • 数据库查询语句select的用法
    这篇文章将为大家详细讲解有关数据库查询语句select的用法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数据库查询语句select用于从表中选取数据,结果被存...
    99+
    2022-10-18
  • mysql中group by分组查询中查询最新字段值的sql语句怎么写?
    目录 背景需求效率不高的sql写法效率高的sql写法拓展 背景 今天看代码的时候,看到一个比较复杂的sql语句,我知道这条sql语句最终想要实现的结果,所以我就想自己写sql来实现一下...
    99+
    2023-09-11
    mysql sql 数据库
  • oracle数据库查看锁表的sql语句整理
    目录关键表查看锁表的SIDsql1sql2查看锁表执行语句用sid查询单个查询所有加锁的sql查询未提交事务的SQL杀死锁总结 关键表 V$LOCKED_OBJECT :记录锁信息的表v$sessio...
    99+
    2023-10-26
    oracle查看锁表sql语句 oracle 锁表如何查看 oracle查找锁表语句
  • MySQL中的特殊查询语句的用法
    本篇内容主要讲解“MySQL中的特殊查询语句的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的特殊查询语句的用法”吧!1.计算数据表中一共有多少...
    99+
    2022-10-18
  • mysql常用的一些语句整理
    本篇内容主要讲解“mysql常用的一些语句整理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql常用的一些语句整理”吧! 创建表 create TAB...
    99+
    2022-10-18
  • ThinkPHP中的表查询语句如何使用
    这篇文章主要介绍了ThinkPHP中的表查询语句如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ThinkPHP中的表查询语句如何使用文章都会有所收获,下面我们一起来看看吧。一、查询单个字段要查询表中的某...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作