首页 MongoDB查询操作
文章
取消

MongoDB查询操作

查询语法

全量数据

1
db.<tablename>.find({})

数据量

1
db.<tablename>.count()

数据存储空间

1
db.<tablename>.dataSize()

有条件查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$lt:{}  # 小于

$gt:{}  # 大于

$lte:{}  # 小于等于

$gte:{}  # 大于等于

$in:{}  # 包括

$nin:{}  # 不包括

$ne:{}  # 不等于

$all:[{...}, {...}, ...]  # 全部,
# db.student.find({name: {$all: ["小红", "小黄", "小李"]}})

$not:{...}  # 全不

$or:[{...}]  # 或,
# db.student.find($or: [{age: {$lt: 30}, sex: "男"}, {age: {$lt: 25}, sex: "女"}])

$exists:1  # 字段存在,
# db.student.find({age: {$exists: 1}})

正则表达式 ( JavaScript语法 )

模糊查询

1
db.<表名>.find({<字段>:<正则表达式>})

规则

  • 以 /^ 表示必须以指定字符串开头
  • 以 $/ 表示必须以指定字符串结尾

  • 规定内容
1
[a-zA-Z]  # 只能书写26个英文字母的大小写
  • 规定数量
1
{2,10}  # 只能书写2-10个字符

例子

1
2
# 查询学生表里名字是2-10个英文字母组成的全部学生记录
db.student.find({name: /^[a-zA-Z]{2, 10}$/})

分页查询

skip():设置起始位置

limit():设置偏移量

例子

1
2
# 查询前十条记录
db.student.find({}).limit(10);
1
2
# 查询第20-30条记录(跳过前20条数据,获取后10条数据)
db.student.find({}).skip(20).limit(10);

数据排序

sort():1代表升序,-1代表降序

规则

sort必须写在find之后(紧贴!!)

例子

1
2
# 降序排序上一条的结果
db.student.find({}).sort({name: -1}).skip(20).limit(10);

去重

distinct()

规则

  • 不能跟在find之后,而且取代find的位置
  • 必须指定去重的字段(字符串)

返回

数组格式!!!

例子

1
2
# 查询每个学生的记录(不允许重复)
db.student.distinct("name")
1
2
3
# 对上一条结果进行降序排序
db.student.distinct("name").sort(function(){return -1})
# 数组格式不支持直接排序,此为JavaScript的排序函数,参数为表示排序规则的匿名函数
1
2
3
# 对上上结果进行分页查询
db.student.distinct("name").slice(0, 5)
# 数组格式不支持skip、limit,此为JavaScript的切片

索引

创建索引

1
db.<tablename>.createIndex({<keys>: 1}, <options>)  # 1代表升序,-1代表降序

注意事项

创建索引的过程需要阻塞MongoDB——会影响其他增删改查操作

options

background:在空闲的时候创建索引(最好带上!!!)

1
db.<tablename>.createIndex({<keys>: 1}, {background: true})  # 在空闲的时候创建索引

name:指定索引名字(不指定默认为keys_index,index为1,2。。。)

1
db.<tablename>.createIndex({<keys>: 1}, {name: <indexname>})  # 在空闲的时候创建索引

unique:唯一性索引

1
2
db.<tablename>.createIndex({<keys>: 1}, {unique: true})
# 唯一性索引只能创建在公共字段上(每条记录都必须有这个字段),否则报错E11000 duplicate key error collection

删除索引

删除所有索引

1
db.<tablename>.dropIndexes()

删除单个索引

1
db.<tablename>.dropIndex(<indexname>)

修改索引

查询索引

1
db.<tablename>.getIndexes()

查询结果

1
2
3
4
5
6
7
8
9
10
11
12
Key							Value
{1}							[n elements]  # 有多少条索引记录
	[0]						{n fields}  # 第几条索引记录
		v					2
		key					{n fields}
			<索引的字段名>	1.0
		name				<索引名字>
		ns					<索引所在的表名>
		<options>
	[1]
		...
	...
本文由作者按照 CC BY 4.0 进行授权