专栏名称: taojing
后端
目录
相关文章推荐
新闻广角  ·  陈奕迅,凌晨突发紧急公告 ·  2 天前  
新闻广角  ·  波音股价盘前重挫近9% ·  3 天前  
51好读  ›  专栏  ›  taojing

Mongodb聚合Aggregation讲的比较明白【转载】

taojing  · 掘金  ·  · 2018-01-02 07:03

正文

请到「今天看啥」查看全文


$project

使用 $project 可以用來選取 document 中的欄位,還可以在這些欄位上進行一些操作,或是新建欄位。
下面寫個簡單的使用範例。

首先我們有下列的資料。

{
    "id" : 1,
   "name" : "mark",
   "age" : 20,
   "assets" : 100000000
}

然後我們可以用 $project 來決定要那個欄位,我們選取 id name 欄位。

db.user.aggregate({ "$project" : { "id" : 1, "name" : 1 }})

結果如下,當然他的功能沒著麼單純,它還可以和很多東西搭配,晚點會說。

{ 
  "_id" : ObjectId("584e73bd6f4811e2ad965055"), 
  "id" : 1, "name" : "mark" 
}

$match

$match 主要用於對 document 的篩選,用個簡單的範例來看看。

{
    "id" : 1
   "name" : "mark",
   "age" : 20,
   "assets" : 100000000
},{
    "id" : 2
   "name" : "steven",
   "age" : 40,
   "assets" : 1000000
}

然後我們要只選出 age 10至30 歲的人。

db.user.aggregate({ "$match" : { age : { $gt : 10, $lte : 30 } }})

結果

{ 
  "_id" : ObjectId("584e2c486f4811e2ad965043"), 
  "id" : 1, 
  "name" : "mark", 
  "age" : 20, 
  "assets" : 100000000 
}

$group

$group 它的功能就是用來分組,你可以決定要依照什麼來分組。

假設我們資料如下。

{"id" :1 , "status" : "o" , "count" : 5},
{"id" :2 , "status" : "o", "count" : 5},
{"id" :3 , "status" : "o", "count" : 5},
{"id" :4 , "status" : "x", "count" : 10},
{"id" :5 , "status" : "x", "count" : 10},
{"id" :6 , "status" : "x", "count" : 10}

然後我們希望根據 status 來分成兩組。

db.user.aggregate({"$group" : {"_id" : "$status"}})

當然我自也可以在分組時進行一些統計,例如兩組的 count 總計。

db.user.aggregate(
    {"$group" : {"_id" : "$status","total" : {"$sum" : "$count"}}
})

結果如下。







请到「今天看啥」查看全文