MongoDB中的查询操作

2023-01-08 MongoDB

MongoDB中的查询和MySQL有很大的不同,MongoDB只支持单表查询,但是能够完成很复杂的查询操作,这些查询都是JSON格式的,因此和sql语句有着很大的不同。

# 查询函数find

db.student.find({age: 20})  // 找age=20的记录
db.student.find({age: {$gte: 20}})  // age>=20
db.student.findOne({age: {$gte: 20}})  // age>=20,返回第一条元素

上述age>=20使用了特定的表达式来书写的,如下表所示:

序号 表达式 含义
1 $lt 小于
2 $gt 大于
3 $lte 小于等于
4 $gte 大于等于
5 $in 包括
6 $nin 不包括
7 $ne 不等于

# 查询函数中的表达式

下面四种表达式要略微复杂些。

序号 表达式 意义
1 $all 全部
2 $not 全部取反
3 $or
4 $exists 含有字段
db.teacher.save([
	{name:"Jack",role:["班主任","年级主任","副校长"]},
	{name:"Nick",role:["班主任"]},
])
// 查询同时有["班主任","年级主任"]的数据
db.teacher.find({role:{$all:["班主任","年级主任"]}})  
// 查询年龄在28-30岁之间的学生
db.student.find({age:{$not:{$gte:28,$lte:30}}})  
// 查询30岁以下的男学生,或者25岁以下的女学生
db.student.find({$or:[
	{age:{$lt:30},sex:"男"},
	{age:{$gt:25},sex:"女"}
]})
// 查询含有city字段的学生
db.student.find({city:{$exists:1}})

# 正则表达式

MongoDB支持正则表达式查找数据

db.student.find({name:/^李/})  // 查询姓李的同学记录
db.student.find({name:/^[a-zA-Z]{2,10}$/})  // 查询姓名是英文,且字符在2-10的同学记录

# 分页查找数据

db.student.find().limit(10)
db.student.find().skip(20).limit(10)  // 从第20条开始,往后取10条

# 数据排序

sort函数可以对结果集进行排序,1代表升序,-1代表降序

db.student.find().sort({name: 1})

# 去重

用distinct()函数替代find()函数查找不重复的记录。

db.student.distinct("name")
上次更新: 1 年前