正文
$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"}}
})
結果如下。