类别 | 操作符 | 语法 | 功能用途 |
---|---|---|---|
逻辑运算符 | $add、$subtract、$mul、$divide | ||
布尔表达式 | $and | {$and: [ |
如果所有表达式的值为true,那就返回true,否则返回false。 |
$or | {$or: [ |
只要有任意表达式的值为true,那就返回true,否则返回false。 | |
$not | { $not: [ |
对expression取反。 | |
控制表达式 | $cond | { $cond: { if: 或者 { $cond: [ |
如果boolean-expression为的值是true,那就返回true-case,否则返回false-case。 |
$ifNull | { $ifNull: [ |
如果expression是null,那就返回replacement-expression-if-null,否则返回expression。 | |
比较表达式 | $cmp | { $cmp: [ |
比较expression1和expression2,如果相等,返回0;如果前者大于后者,返回一个正数1;如果前者小于后者。返回一个负数-1。 |
$strcasecmp | { $strcasecmp: [ |
$cmp的细化。用来比较expression1和expression2;区分大小写,主要针对ASCII characters。如果相等,返回0;如果前者大于后者,返回一个正数1;如果前者小于后者。返回一个负数-1。 | |
$eq/$ne/$gt/$gte/$lt/$lte | $eq/$ne/$gt/$gte/$lt/$lte :[ |
对expression1和expression2执行相应的比较操作,返回比较的结构(true或false)。 |
1、$add
加法运算,基础语法:{ $add : [ < expression1 > , < expression2 > , ... ] }
2、$subtract
减法运算,基础语法:{ $subtract: [ <expression1>, <expression2> ] }
expression1减去expression2
3、$multiply
乘法运算,基础语法:{ $multiply : [ < expression1 > , < expression2 > , ... ] }
4、$divide
除法运算,基础语法:{ $divide: [ <expression1>, <expression2> ] }
expression1为被除数,expression2为除数
有文档3个
{
**"_id"
: 1,
"item"
:
"abc"
,
"price"
: 10,
"fee"
: 2,
date
: ISODate(
"2014-03-01T08:00:00Z"
**) }
{
**"_id"
: 2,
"item"
:
"jkl"
,
"price"
: 20,
"fee"
: 1,
date
: ISODate(
"2014-03-01T09:00:00Z"
**) }
{
**"_id"
: 3,
"item"
:
"xyz"
,
"price"
: 5,
"fee"
: 10,
date
: ISODate(
"2014-03-15T09:00:00Z"
**) }
求和
db.sales.aggregate(
[{ $project: { item: 1, total: { $add: [ "$price", "$fee" ] }}}
])
结果:
{ “_id” : 1, “item” : “abc”, “total” : 12 } { “_id” : 2, “item” : “jkl”, “total” : 21 } { “_id” : 3, “item” : “xyz”, “total” : 15 }
date字段数据 + 3天
db.sales.aggregate(
[
{ $project: { item: 1, expire_date: { $add: [ "$date", 3*24*60*60*1000 ] } } }
])
结果显示为 :
{ “_id” : 1, “item” : “abc”, “expire_date” : ISODate(“2014-03-04T08:00:00Z”) } { “_id” : 2, “item” : “jkl”, “expire_date” : ISODate(“2014-03-04T09:00:00Z”) } { “_id” : 3, “item” : “xyz”, “expire_date” : ISODate(“2014-03-18T09:00:00Z”) }
求差
求积
db.sales.aggregate(
[
{ $project: { item: 1, total_price: { $multiply: [ "$price", "$fee" ] } } }
])
结果:
{ “_id” : 1, “item” : “abc”, “total_price” : 20 } { “_id” : 2, “item” : “jkl”, “total_price” : 20 } { “_id” : 3, “item” : “xyz”, “total_price” : 50 }
重新插入documents
{ “_id” : 1, “name” : “A”, “hours” : 80, “resources” : 7 }, { “_id” : 2, “name” : “B”, “hours” : 40, “resources” : 4 }
求商
db.planning.aggregate(
[
{ $project: { name: 1, workdays: { $divide: [ "$hours", 8 ] } } }
])
结果取整:
{ “_id” : 1, “name” : “A”, “workdays” : 10 }
{ “_id” : 2, “name” : “B”, “workdays” : 5 }
db.planning.aggregate(
[
{ $project: { remainder: { $mod: [ "$hours", "$tasks" ] } } }
])
结果取余:
{ “_id” : 1, “remainder” : 3 }
{ “_id” : 2, “remainder” : 0 }