类别 操作符 语法 功能用途
逻辑运算符 $add、$subtract、$mul、$divide
布尔表达式 $and {$and: [ , , … ]} 如果所有表达式的值为true,那就返回true,否则返回false。
$or {$or: [ , , … ]} 只要有任意表达式的值为true,那就返回true,否则返回false。
$not { $not: [ ] } 对expression取反。
控制表达式 $cond { $cond: { if: , then: , else: } }
或者
{ $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"**) }

求和

  1. db.sales.aggregate(
  2. [{ $project: { item: 1, total: { $add: [ "$price", "$fee" ] }}}
  3. ])

结果:

{ “_id” : 1, “item” : “abc”, “total” : 12 } { “_id” : 2, “item” : “jkl”, “total” : 21 } { “_id” : 3, “item” : “xyz”, “total” : 15 }

date字段数据 + 3天

  1. db.sales.aggregate(
  2. [
  3. { $project: { item: 1, expire_date: { $add: [ "$date", 3*24*60*60*1000 ] } } }
  4. ])

结果显示为 :

{ “_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”) }

求差

属于add的逆运算,用法等同

求积

  1. db.sales.aggregate(
  2. [
  3. { $project: { item: 1, total_price: { $multiply: [ "$price", "$fee" ] } } }
  4. ])

结果:

{ “_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 }

求商

  1. db.planning.aggregate(
  2. [
  3. { $project: { name: 1, workdays: { $divide: [ "$hours", 8 ] } } }
  4. ])

结果取整:

{ “_id” : 1, “name” : “A”, “workdays” : 10 }

{ “_id” : 2, “name” : “B”, “workdays” : 5 }

  1. db.planning.aggregate(
  2. [
  3. { $project: { remainder: { $mod: [ "$hours", "$tasks" ] } } }
  4. ])

结果取余:

{ “_id” : 1, “remainder” : 3 }

{ “_id” : 2, “remainder” : 0 }