Command.expr(aggregateExpression: Expression): Command

支持端:云函数 1.4.0

查询操作符,用于在查询语句中使用聚合表达式,方法接收一个参数,该参数必须为聚合表达式

参数

aggregateExpression: Expression

要添加进数组的一个或多个元素

返回值

Command

使用说明

  1. expr 可用于在聚合 match 流水线阶段中引入聚合表达式
  2. 如果聚合 match 阶段是在 lookup 阶段内,此时的 expr 表达式内可使用 lookup 中使用 let 参数定义的变量,具体示例可见 lookup指定多个连接条件 例子
  3. expr 可用在普通查询语句(where)中引入聚合表达式

示例代码 1:比较同一个记录中的两个字段

假设 items 集合的数据结构如下:

  1. {
  2. "_id": string,
  3. "inStock": number, // 库存量
  4. "ordered": number // 被订量
  5. }

找出被订量大于库存量的记录:

  1. const _ = db.command
  2. const $ = _.aggregate
  3. db.collection('items').where(_.expr($.gt('$ordered', '$inStock'))).get()

示例代码 2:与条件语句组合使用

假设 items 集合的数据结构如下:

  1. {
  2. "_id": string,
  3. "price": number
  4. }

假设加个小于等于 10 的打 8 折,大于 10 的打 5 折,让数据库查询返回打折后价格小于等于 8 的记录:

  1. const _ = db.command
  2. const $ = _.aggregate
  3. db.collection('items').where(_.expr(
  4. $.lt(
  5. $.cond({
  6. if: $.gte('$price', 10),
  7. then: $.multiply(['$price', '0.5']),
  8. else: $.multiply(['$price', '0.8']),
  9. })
  10. ,
  11. 8
  12. )
  13. ).get()