查询语法
全量数据
1
| db.<tablename>.find({})
|
数据量
数据存储空间
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
| # 查询学生表里名字是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]
...
...
|