> 文章列表 > MongoDB 聚合管道中使用比较表达式运算符

MongoDB 聚合管道中使用比较表达式运算符

MongoDB 聚合管道中使用比较表达式运算符

比较表达式运算符主要用于实现表达式之间的比较运算,主要包含了等于、不等于、大于、大于等于、小于、小于等于、比较大小等比较操作。

下面我们进行详细介绍:

一、准备工作

初始化学生成绩

db.scores.insertMany([{ "_id" : 1, "name" : "张三", "eng" : 80, "math" : 70 },{ "_id" : 2, "name" : "李四", "eng" : 60, "math" : 90 },{ "_id" : 3, "name" : "王五", "eng" : 90, "math" : 50 }
])

二、等于($eq)

语法:{ $eq: [ <expression1>, <expression2> ] }

判断两个表达式结果是否相等

例子:查找张三的成绩

db.scores.aggregate([{$match: {$expr: { $eq: [ "$name", "张三" ] }}}
])

等效于:

db.scores.aggregate([{$match: {"name": "张三"}}
])

 等效于:

db.scores.aggregate([{$match: {"name": { $eq: "张三" }}}
])

$match中如果要使用表达式运算符,需要使用$expr运算符

聚合查询的结果如下:

{ "_id" : 1, "name" : "张三", "eng" : 80, "math" : 70 }

三、不等于($eq)

语法:{ $ne: [ <expression1>, <expression2> ] }

判断两个表达式结果是否不相等

例子:查找除张三外的所有人的成绩

db.scores.aggregate([{$match: {$expr: { $ne: [ "$name", "张三" ] }}}
])

等效于:

db.scores.aggregate([{$match: {"name": { $ne: "张三" }}}
])

$match中如果要使用表达式运算符,需要使用$expr运算符

聚合查询的结果如下:

{ "_id" : 2, "name" : "李四", "eng" : 60, "math" : 90 }
{ "_id" : 3, "name" : "王五", "eng" : 90, "math" : 50 }

四、大于($gt)

语法:{ $gt: [ <expression1>, <expression2> ] }

判断第一个表达式的结果是否大于第二个表达式的结果

例子:查找英语成绩超过80的学生

db.scores.aggregate([{$match: {$expr: { $gt: [ "$eng", 80 ] }}}
])

等效于:

db.scores.aggregate([{$match: {"eng": { $gt: 80 }}}
])

聚合查询的结果如下:

{ "_id" : 3, "name" : "王五", "eng" : 90, "math" : 50 }

五、大于等于($gte)

语法:{ $gte: [ <expression1>, <expression2> ] }

判断第一个表达式的结果是否大于等于第二个表达式的结果

例子:查找英语成绩及格的学生

db.scores.aggregate([{$match: {$expr: { $gte: [ "$eng", 60 ] }}}
])

等效于:

db.scores.aggregate([{$match: {"eng": { $gte: 60 }}}
])

聚合查询的结果如下:

{ "_id" : 1, "name" : "张三", "eng" : 80, "math" : 70 }
{ "_id" : 2, "name" : "李四", "eng" : 60, "math" : 90 }
{ "_id" : 3, "name" : "王五", "eng" : 90, "math" : 50 }

六、小于($lt)

语法:{ $lt: [ <expression1>, <expression2> ] }

判断第一个表达式的结果是否小于第二个表达式的结果

例子:查找数学成绩不及格的学生

db.scores.aggregate([{$match: {$expr: { $lt: [ "$math", 60 ] }}}
])

等效于:

db.scores.aggregate([{$match: {"math": { $lt: 60 }}}
])

聚合查询的结果如下:

{ "_id" : 3, "name" : "王五", "eng" : 90, "math" : 50 }

七、小于等于($lte)

语法:{ $lte: [ <expression1>, <expression2> ] }

判断第一个表达式的结果是否小于等于第二个表达式的结果

例子:查找数学成绩不超过80的学生

db.scores.aggregate([{$match: {$expr: { $lte: [ "$math", 80 ] }}}
])

等效于:

db.scores.aggregate([{$match: {"math": { $lte: 80 }}}
])

聚合查询的结果如下:

{ "_id" : 1, "name" : "张三", "eng" : 80, "math" : 70 }
{ "_id" : 3, "name" : "王五", "eng" : 90, "math" : 50 }

八、比较大小($cmp)

语法:{ $cmp: [ <expression1>, <expression2> ] }

比较两个表达式的结果并返回

如果第一个表达式的结果小于第二个表达式的结果,则返回-1

如果第一个表达式的结果大于第二个表达式的结果,则返回1

如果两个表达式的结果相等,则返回0

例子:判断英语成绩是否超过80分

db.scores.aggregate([{$project: {"name": 1,"eng": 1,"result": { $cmp: [ "$eng", 80 ] }}}
])

聚合查询的结果如下:

{ "_id" : 1, "name" : "张三", "eng" : 80, "result" : 0 }
{ "_id" : 2, "name" : "李四", "eng" : 60, "result" : -1 }
{ "_id" : 3, "name" : "王五", "eng" : 90, "result" : 1 }

(1)张三的英语成语刚好等于80分,结果为0

(2)李四的英语成语小于80分,结果为-1

(3)王五的英语成语大于80分,结果为1