mongodb使用指南

个人测试使用docker部署一个mongdb
docker run --name mongodb --restart=always -p 27017:27017 -v /Data/mongodb:/data/ -d mongo:4.2
命令行连接mongo:

mongo ip:port/dbname -u 用户名 -p 密码

 

#注:mongo中集合对比mysql就表示mysql的表

操作mongo

一、系统命令

1.查看当前数据库状态
db.stats()

2.查看当前数据库版本
db.version()

3.查看当前使用的数据库
db.getName();

4.查看当前db的链接机器地址
db.getMongo();

5.登陆mongo
mongo 127.0.0.1:27017

6.查看mongo数据库
show dbs;
默认库:
admin
config
local

 

二、增删改操作

1.切换/创建数据库
use dbname; 当创建一个集合(table)的时候会自动创建当前数据库

2.删除一个数据库
db.dropDatabase();

3.删除一个表(user集合)
db.user.drop()

4.创建一个聚集集合(table),可以不需要专门创建集合,声明插入数据即可自动创建
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
语句有问题

5.声明集合并插入数据,创建user表,新增name字段
db.user.insert({"name":"augus"});

6.插入数据
db.user.insert({"name":"yuki"});

7.5. MongoDB数据库更新数据
(1). 查找名字为小明的,把年龄更改为 16 岁
db.user.update({"name":"小明"},{$set:{"age":16}});
(2). 查找英语成绩为 70的人,把年龄更改为 33 岁
db.user.update({"score.english":70},{$set:{"age":33}});
(3). 查找所有性别为男的用户把年龄都改为 33 岁
db.user.update({"sex":"男"},{$set:{"age":33}},{multi: true});
(4). 查找name为小明的用户的信息进行完整替换,注意没有$set了
db.user.update({"name":"小明"},{"name":"大明","age":16});
(5). 查找name为Lisi的用户,将其年龄增加50岁
db.user.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
类似UPDATE user SET age = age + 50 WHERE name = 'Lisi';
(6). 查找name为Lisi的用户,将其年龄增加50岁,姓名改为Wangwu
db.user.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'Wangwu'}}, false, true);
类似update users set age = age + 50, name = 'Wangwu' where name = 'Lisi';

6. MongoDB数据库删除数据
(1). 删除年龄为32的所有用户
db.user.remove({age: 32});
(2). 删除年龄为32的一个用户
db.user.remove( { "age": "32" }, { justOne: true } )

 

 

三、用户管理

1.显示当前所有用户
show users;
db.system.users.find()

2.创建用户与密码userAdminAnyDatabase这个只具有管理用户的权限,不具有增删改操作权限
db.createUser(
  {
    user: "admin",
    pwd: "abc123",
    roles: [{ role: "userAdminAnyDatabase", db: "admin" } ]
  }
创建普通读写用户
db.createUser(
  {
    user: "admin",
    pwd: "abc123",
    roles: [{ role: "readWrite", db: "admin" },{ role : "read", db : "game_report" } ]
  }
创建超管用户
use admin
db.createUser(
  {
    user: "root",
    pwd: "root",
    roles: [ { role: "root", db: "admin" } ]
  }
);

3.修改用户密码
db.changeUserPassword("admin", "admin");

4.查看用户
db.auth("admin", "admin");

5.删除用户
db.dropUser("admin")

注:mongo中所有用户角色
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
内部角色:__system


角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

 

四、查询

1.显示所有表
show collections

2.查询表内容
db.user.find();

3.查询数据
(1). 查询所有记录
db.user.find();
类似 SELECT* FROM user;
(2). 查询当前集合中的某列去重后的数据
db.user.distinct("name");
以上会过滤掉 name 中的相同数据
类似 SELECT  DISTINCT name  FROM user;
(3). 查询 age = 22 的记录
db.user.find({"age": 22});
类似  SELECT* FROM user;
(4). 查询 age > 22 的记录
db.user.find({age: {$gt: 22}});
类似 SELECT* FROM user WHERE age >22;
(5). 查询 age < 22 的记录
db.user.find({age: {$lt: 22}});
类似 SELECT* FROM user WHERE age <22;
(6). 查询 age >= 25 的记录
db.user.find({age: {$gte: 25}});
类似 SELECT* FROM user WHERE age >= 25;
(7). 查询 age <= 25 的记录
db.user.find({age: {$lte: 25}});
类似 SELECT* FROM user WHERE age <= 25;
(8). 查询 age >= 23 并且 age <= 26
db.user.find({age: {$gte: 23, $lte: 26}});
类似 SELECT* FROM user WHERE age >= 25 AND age<=26;
(9). 查询 name 中包含 mongo 的数据,多用于模糊查询搜索
db.user.find({name: /mongo/});
类似 SELECT* FROM user WHERE name LIKE '%mongo%';
(10). 查询 name 中以 mongo 开头的数据
db.user.find({name: /^mongo/});
类似 SELECT* FROM user WHERE name LIKE 'mongo%';
(11). 查询指定列 name、age 数据
db.user.find({}, {name: 1, age: 1});
类似 SELECT name, age FROM user;
name 也可以用 true 或 false,ture 的情况下与name:1 效果一样,如果用 false 就 是排除 name,显示其它列的信息。
(12). 查询指定列 name、age 数据, 并且age > 25
db.user.find({age: {$gt: 25}}, {name: 1, age: 1});
类似 SELECT name, age FROM user WHERE age >25;
(13). 按照列排序 1 升序 -1 降序
升序:db.user.find().sort({age: 1});
降序:db.user.find().sort({age: -1});
(14). 查询 name = zhangsan, age = 22 的数据
db.user.find({name: 'zhangsan', age: 22});
类似 SELECT * FROM user WHERE name = 'zhangsan' AND age = '22';
(15). 查询前 5 条数据
db.user.find().limit(5);
类似 SELECT TOP 5 * FROM user;
(16). 查询 10 条以后的数据
db.user.find().skip(10);
类似SELECT * FROM user WHERE id NOT IN ( SELECT TOP 10 * FROM user );
(17). 查询在 5-10 之间的数据
db.user.find().limit(10).skip(5);
可用于分页,limit 是页大小,skip 是第几页乘以页大小的值
类似SELECT * FROM user LIMIT 5,5
(18). OR 查询
db.user.find({$or: [{age: 22}, {age: 25}]});
类似SELECT * FROM user WHERE age = 22 OR age = 25;
(19). findOne 查询第一条数据
db.user.findOne();
类似 SELECT TOP 1 * FROM user;
类似 db.user.find().limit(1);
(20). 查询某个结果集的记录条数,用于统计数量
db.user.find({age: {$gte: 25}}).count();
类似 SELECT COUNT(*) FROM user WHERE age >= 25;
如果要返回限制之后的记录数量,要使用 count(true)或者 count(非 0)
db.user.find().skip(10).limit(5).count(true);

 

五、备份恢复

1.整个数据库导出命令:
mongodump -u username -p password -h dbhost<:port> -d dbname -o dbdirectory
如:mongodump -u test -p passwd -h 127.0.0.1:27017 -d test_db -o ./test_db

2.整库倒入数据
整个数据库导入命令
mongorestore -u username -p password -h <hostname><:port> -d dbname <path>
如:mongorestore -u test -p passwd  -h 127.0.0.1:27017 -d test_db ./test_db

3.单表导出
mongoexport -u root -p xxxx  -d game_server -c sys_config -o sys_config.json
-d表示数据库名称
-c表示表名称

4.单表导入
mongoimport -u root -p xxx  --db game_server --collection game_ip_list_config --file game_ip_list_config.json
game_server 数据库名称
game_ip_list_config表名称(要恢复的表)

5.从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库

6.从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中

 

六、索引

1.创建索引
db.users.ensureIndex({name: 1});
db.users.ensureIndex({name: 1, ts: -1});
db.users.createIndex({"uid": 1, "customerOrderNumber": 1, "state":1, "bindTime":1})
db.collection.createIndex(keys, options, {background: true})
语法中Key值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为 -1即可, background:true 的选项,让创建工作在后台执行

2.查询索引
db.users.getIndexes();

3.查看总索引记录大小
db.users.totalIndexSize();

4.读取当前集合的所有index信息
db.users.reIndex();

5.删除指定索引
db.users.dropIndex("name_1");

6.删除所有索引索引
db.users.dropIndexes();

7.查看语句是否使用索引
db.users.find({"customerOrderNumber":"S21032432142483"}).sort({ close:-1 }).limit(1).explain();

 

七、监控与调优

Mongodb 性能监控与分析:
mongostat --host 192.168.1.100:27017 -uroot -p123456 --authenticationDatabase admin
各字段解释说明:
insert/s : 官方解释是每秒插入数据库的对象数量,如果是slave,则数值前有*,则表示复制集操作
query/s : 每秒的查询操作次数
update/s : 每秒的更新操作次数
delete/s : 每秒的删除操作次数
getmore/s: 每秒查询cursor(游标)时的getmore操作数
command: 每秒执行的命令数,在主从系统中会显示两个值(例如 3|0),分表代表 本地|复制 命令


mongotop --host 192.168.1.100:27017 -u root -p123456 --authenticationDatabase admin
各字段解释说明:
ns:数据库命名空间,后者结合了数据库名称和集合。
db:数据库的名称。名为 . 的数据库针对全局锁定,而非特定数据库。
total:mongod在这个命令空间上花费的总时间。
read:在这个命令空间上mongod执行读操作花费的时间。
write:在这个命名空间上mongod进行写操作花费的时间。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一颗大白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值