B站视频: https://www.bilibili.com/video/BV1xz4y1X7cE MongoDB 数据库笔记
介绍了 mongoDB 数据库的分页,索引等高级语法
1 .排序&分页
-
sort
排序
db.集合名.find(...).sort({键: 1|-1})
注意: 1: 升序, -1: 降序
-
skip & limit
skip : 跳过指定数量(可选)
limit : 限制查询的数量查询跳过前两条,显示剩下的前两条数据
db.c2.find().skip(2).limit(2)
-
count
统计总数量
db.c2.find().count()
2. 聚合查询
原始数据
db.c3.insert({name: "a",sex: "男",age: 4})
db.c3.insert({name: "b",sex: "女",age: 8})
db.c3.insert({name: "c",sex: "男",age: 10})
db.c3.insert({name: "d",sex: "男",age: 6})
db.c3.insert({name: "e",sex: "女",age: 12})
db.c3.insert({name: "f",sex: "男",age: 18})
db.c3.insert({name: "g",sex: "男",age: 20})
db.c3.insert({name: "h",sex: "女",age: 14})
db.c3.insert({name: "i",sex: "男",age: 9})
-
基本语法
db.集合名.aggregate([ { 管道: { 表达式 } }, ... ]) db.集合名.aggregate({管道: {表达式}}) 只能写一个管道,写到[]里面可以写多个
管道 作用 $group 将集合中的文档分组,可用于统计结果。 $sort 将输入文档排序后输出 $skip 在聚合管道中跳过指定数量的文档,并返回余下的文档。 $limit 用来限制MongoDB聚合管道返回的文档数 $project 修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套 $match 用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 $unwind 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 $geoNear 输出接近某一地理位置的有序文档 表达式 作用 $sum 计算总和,$sum: 1相当于count() $avg 计算平均值 $min 获取集合中所有文档对应值得最小值 $max 获取集合中所有文档对应值得最大值。 $push 在结果文档中插入值到一个数组中 $addToSet 在结果文档中插入值到一个数组中,但不创建副本 $first 根据资源文档的排序获取第一个文档数据 $last 根据资源文档的排序获取最后一个文档数据 -
$group & $sort
发布统计男生和女生的总年龄, 平均年龄, 最大年龄, 最小年龄, 并按人数降序
db.c3.aggregate([ { $group: { _id: "$sex", count: {$sum: 1}, avgAge: {$avg: "$age"}, maxAge: {$max: "$age"}, minAge: {$min: "$age"}, } }, {$sort: {count: -1}}, ])
{ "_id" : "男", "count" : 6, "avg" : 11.166666666666666, "ageMax" : 20, "ageMin" : 4 }
{ "_id" : "女", "count" : 3, "avg" : 11.333333333333334, "ageMax" : 14, "ageMin" : 8 }
注意: _id: "$sex"
固定写法,表示以sex字段分组(可以为null,null代表全部数据),这里sex字段前面必须有$符号
-
$project & $skip & $limit
只显示第三, 第四行的 age, name 列
db.c3.aggregate([ { $project : { _id: 0, age : 1 , name : 1 , } }, {$skip: 2}, {$limit: 2} ])
{ "name" : "c", "age" : 10 } { "name" : "d", "age" : 6 }
-
$match
显示 age 在12-18的数据
db.c3.aggregate([ { $match: { age: { $gte: 12, $lte: 18 } } } ])
3. 索引
原始数据
for(i=0;i<100000;i++){db.c4.insert({name: "a"+i,age: 1+i})}
-
创建索引
db.c4.createIndex({键: 1|-1},[{可选参数: 值}])
注意: 1. 1: 升序, -1: 降序 例如: age: 1 表示创建age索引并按照升序的方式存储 2. createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
参数 类型 作用 name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称 background background 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。 unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重 给 name 字段加上索引
db.c4.createIndex({name: 1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
给age字段加上索引,并起一个索引名称
db.c4.createIndex({age: 1},{name: "aaaaa"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
}
-
查看索引
-
查看索引
db.c4.getIndexes()
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1 }, "name" : "name_1" }, { "v" : 2, "key" : { "age" : 1 }, "name" : "aaaaa" } ]
-
查看索引大小
db.c4.totalIndexSize()
-
-
删除索引
-
删除全部索引
db.c4.dropIndexes()
注意: 系统自带的索引删除不了
-
-
删除指定索引
db.集合名.dropIndex("索引名称")
删除 name 索引和 age 索引
db.c4.dropIndex("name_1") db.c4.dropIndex("aaaaa")
注意: 1. name 字段索引的名称可通过查看索引得到 2. age 字段索引的名称就是自己自定义的 > db.c4.dropIndex("name_1") { "nIndexesWas" : 3, "ok" : 1 } > db.c4.dropIndex("aaaaa") { "nIndexesWas" : 2, "ok" : 1 } > db.c4.getIndexes() [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
4. 权限机制
-
添加超级管理员
use admin db.createUser({"user": "admin","pwd": "admin","roles": [{role: "root",db: "admin"}]})
-
退出后卸载服务
管理员身份运行dos窗口,在bin目录下执行
mongod --remove
-
重新安装需要账号密码的服务
mongod --install --dbpath E:\mongodb\data --logpath E:\mongodb\logs\mongodb2.log --auth
注意: 日志名不能重复
-
启动服务
net start mongodb
-
如何登陆
- 第一种
mongo 127.0.0.1:27017/admin -u admin -p admin
- 第二种
mongo use admin db.auth("admin","admin")
5. 备份还原
-
备份
mongodump -h -port -u -p -d -o
-h host 服务器IP地址(一般不写,默认本机) -port 端口(一般不写,默认27017) -u user 账号 -p pwd 密码 -d database 数据库(不写则导出全部) -o open 备份到指定目录下
例:
mongodump -u admin -p admin -o E:\mongodb\bak