(译文)SQL与Mongodb聚合之前的对应关系

本文翻译自:https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/

由于本人也在学习Mongodb,项目中用到聚合,看到文档这篇不错就翻译一下(仅供参考)

SQL中的聚合函数和Mongodb中的管道相互对应的关系:

WHERE	             $match
GROUP BY	     $group
HAVING	             $match
SELECT	             $project
ORDER BY	     $sort
LIMIT	             $limit
SUM()	             $sum
COUNT()	             $sum
join	             $lookup

例子:

先创建文档,填充数据

/* 0 */
{
  "_id" : ObjectId("5812b447311bb4272016496a"),
  "cust_id" : "abc123",
  "ord_date" : ISODate("2012-11-02T17:04:11.102Z"),
  "status" : "A",
  "price" : 50,
  "items" : [{
      "sku" : "xxx",
      "qty" : 25,
      "price" : 1
    }, {
      "sku" : "yyy",
      "qty" : 25,
      "price" : 1
    }]
}

/* 1 */
{
  "_id" : ObjectId("58131494311bb418b058fcba"),
  "cust_id" : "a",
  "ord_date" : ISODate("2012-11-02T17:04:11.102Z"),
  "status" : "B",
  "price" : 70,
  "items" : [{
      "sku" : "xxx",
      "qty" : 25,
      "price" : 1
    }, {
      "sku" : "yyy",
      "qty" : 25,
      "price" : 1
    }]
}

/* 2 */
{
  "_id" : ObjectId("581314b6311bb418b058fcbb"),
  "cust_id" : "ab",
  "ord_date" : ISODate("2012-11-02T17:04:11.102Z"),
  "status" : "E",
  "price" : 60,
  "items" : [{
      "sku" : "xxx",
      "qty" : 55,
      "price" : 1
    }, {
      "sku" : "yyy",
      "qty" : 25,
      "price" : 1
    }]
}

例1:

SQL:

SELECT COUNT(*) AS count  FROM orders

  

Mongodb:

db.orders.aggregate([
  {
    $group:{
          _id:null,
          count:{$sum:1}
        }
  }
])

例2:

SQL:

SELECT SUM(price) AS total FROM orders

Mongodb:

db.orders.aggregate(
         [
          {
            $group:

            {
            _id:null,
            total:{$sum:"$price"}
            }
          }
        ])

例3:

SQL:

SELECT cust_id,SUM(price) AS total FROM orders GROUP BY cust_id

Mongodb:

db.orders.aggregate([
            {
              $group:
                  {
                        _id:"$cust_id",
                    total:
                      {
                       $sum:"$price"
                      }
                  }
            },
            {

              $sort:
                {
                  total:1
                }
            }

          ])         

例4:

SQL:

SELECT cust_id, ord_date,SUM(price) AS total  FROM orders  GROUP BY cust_id, ord_date

Mongodb:

db.orders.aggregate([
{
    $group:
    {
      _id:
     {
       cust_id:"$cust_id",
       ord_date:
            {
            month:{$month:"$ord_date"},
            day:{$dayOfMonth:"$ord_date"},
            year:{$year:"$ord_date"}
            }
      },
      total:{$sum:"$price"}

     }
}
])

     

 

时间: 2024-12-23 13:22:29

(译文)SQL与Mongodb聚合之前的对应关系的相关文章

【Mongodb教程 第十一课 】MongoDB 聚合

聚合操作过程中的数据记录和计算结果返回.聚合操作分组值从多个文档,并可以执行各种操作,分组数据返回单个结果.在SQL COUNT(*)和group by 相当于MongoDB的聚集. aggregate() 方法 对于在MongoDB中聚集,应该使用aggregate()方法. 语法: aggregate() 方法的基本语法如下 >db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) 例子: 在集合中,有以下的数据: { _id: ObjectId(

MongoDB聚合操作 (group, aggregate, mapReduce操作)

#MongoDb 聚合方法 group aggrate mapreduce# 1. Group (不支持分片,分布计算) * 语法结构 <pre> db.collection.group({ key:{category:1}, // 根据category来分类 cond:{shop_price:{$gt:20}}, // 附加条件商品借个大于20的商品 reduce:function(curr, result){ // curr 标识一行记录, result自定义变量, }, initial:

mongodb聚合查询

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). $sum 计算总和. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) $avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_use

MongoDB 聚合管道(Aggregation Pipeline)

MongoDB 聚合管道(Aggregation Pipeline) - 张善友 时间 2013-12-27 22:40:00            博客园_张善友相似文章 (0)原文                  http://www.cnblogs.com/shanyou/p/3494854.html添加到推刊 收藏到推刊创建推刊 收 藏  取消 已收藏到推刊! 创建推刊 × Modal header --> 请填写推刊名 描述不能大于100个字符! 权限设置: 公开    仅自己可见

mongodb MongoDB 聚合 group

MongoDB 聚合 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 基本语法为:db.collection.aggregate( [ <stage1>, <stage2>, ... ] ) 现在在mycol集合中有以下数据: { "_id" : 1, "name" : "tom", "sex" :

mongodb MongoDB 聚合 group(转)

MongoDB 聚合 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 基本语法为:db.collection.aggregate( [ <stage1>, <stage2>, ... ] ) 现在在mycol集合中有以下数据: { "_id" : 1, "name" : "tom", "sex" :

Mongodb聚合操作之读书笔记

Mongodb聚合操作 读书笔记 mongodb,两种计算聚合pipeline和mapreduce pipeline查询速度快于mapreduce,但MapReduce能够在多台Server上并行执行复杂的聚合逻辑. mongodb不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么mongodb直接停止操作,并向客户端输出错误消息. Pipeline方式使用db.collection.aggregate()函数进行聚合运算,运算速度较快,操作简单.

SQL to MongoDB Mapping Chart

http://docs.mongodb.org/manual/reference/sql-comparison/ In addition to the charts that follow, you might want to consider the Frequently Asked Questions section for a selection of common questions about MongoDB. Terminology and Concepts The followin

Mongodb学习笔记四(Mongodb聚合函数)

第四章 Mongodb聚合函数 插入 测试数据 for(var j=1;j<3;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, Age:i, Address:["henan","wuhan"], Course:[ {Name:"shuxue",Score:i}, {Name:"wuli",Score:i} ] } db.DemoTe