MongoDB基本命令操作

show dbs;                  #查看全部数据库
show collections;          #显示当前数据库中的集合(类似关系数据库中的表)
show users;                #查看当前数据库的用户信息
use <db name>;             #切换数据库跟mysql一样
db;或者db.getName();        #查看当前所在数据库
db.help();                 #显示数据库操作命令,里面有很多的命令 
db.foo.help();             #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
db.foo.find();             #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
db.foo.find( { a : 1 } );  #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

创建一个test数据库例子:
> use test;             #创建数据库
switched to db test
> db;               
test
> show dbs;           #检查数据库
admin 0.000GB
local 0.000GB

> db.test.insert({"_id":"520","name":"xiaoming"})         #创建表

WriteResult({ "nInserted" : 1 })

> db.createUser({user:"xiaoming",pwd:"123456",roles:[{role:"userAdmin",db:"test"}]})        #创建用户
Successfully added user: {
"user" : "xiaoming",
"roles" : [
{
"role" : "userAdmin",
"db" : "test"
}
]
}
db.removeUser("userName");         #删除用户
show users;                        #显示当前所有用户

db.dropDatabase();   #删除当前使用数据库

> show dbs;
admin 0.000GB
local 0.000GB
test 0.000GB
test_1 0.000GB

> db;
test_1

> db.dropDatabase();
{ "dropped" : "test_1", "ok" : 1 }


> show dbs;
admin 0.000GB
local 0.000GB
test 0.000GB

db.stats();             #显示当前db状态

> db.stats();
{
    "db" : "test_1",
    "collections" : 0,
    "views" : 0,
    "objects" : 0,
    "avgObjSize" : 0,
    "dataSize" : 0,
    "storageSize" : 0,
    "numExtents" : 0,
    "indexes" : 0,
    "indexSize" : 0,
    "fileSize" : 0,
    "ok" : 1
}

db.version();         #当前db版本

> db.version();
3.4.10

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

> db.getMongo();
connection to 172.16.40.205:27017

开启远程访问

编辑配置文件:vi /etc/mongod.conf
bindIp: 172.16.40.205      #数据库所在服务器IP地址
保存重启数据库!
本地登录:mongo 172.16.40.205/admin -uadmin -p123456
远程登录:
1. 下载mongodb压缩包
mongodb-linux-x86_64-3.4.10.tgz
2. 解压
> tar zxvf mongodb-linux-x86_64-3.4.10.tgz
3. 进入bin目录
> cd mongodb-linux-x86_64-3.4.10/bin
4. 连接远程数据库
> ./mongo 172.16.40.205:27017/admin  -u user  -p  password


mongodDB备份与恢复

一、mongodDB备份
【语法】:mongodump -h <dbhost> -d <dbname> -o <dbdirectory>

-h:
MongDB所在服务器地址,例如:127.0.0.1或localhost,当然也可以指定端口号:127.0.0.1:27017

-d:
需要备份的数据库实例名,例如:users

-o:
指定备份的数据存放的目录位置,例如:/root/mongdbbak/,当然该目录需要提前建立,在备份完成后,系统自动在/root/mongdbbak/目录下建立一个users目录,这个目录里面存放该数据库实例的备份数据。数据形式是以JSON的格式文件存储。

例如: 
mongodump -h localhost -d users -o /root/mongdbbak/


二、mongodDB恢复

【语法】:mongorestore -h <hostname><:port> -d dbname <path>

--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为:localhost:27017

-d :
需要恢复的数据库实例名,例如:users,当然这个名称也可以和备份时候的不一样,比如user2

--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,谨慎使用!

--dir:
指定备份的目录。

例如:
mongorestore -h localhost -d users --dir /root/mongdbbak/users

>db.data_sys_log.find()       查看全表记录

>DBQuery.shellBatchSize = 5    设置命令行查询数据,每页显示多少条

>db.data_sys_log.findOne()    查询一条记录

>db.data_sys_log.distinct("login_name")    查询聚集中字段的不同记录

>db.data_sys_log.find({"login_name":/王/})    查询聚集中login_name包含“王”关键字的记录

>db.data_sys_log.find({"login_name":/王$/})    查询聚集中login_name以“王”关键字结尾的记录

>db.data_sys_log.find({},{"login_name":1,"role_name":1})     查询聚集中指定列。
1表示true  :相当于select login_name,role_name from data_sys_log
虽然只查login_name,role_name两列,默认会带出_id列

>db.data_sys_log.find({},{"login_name":0,"role_name":0})    查询聚集中排除指定列

>db.data_sys_log.find({"Age":{"$gt":20}},{"login_name":0,"role_name":0})     查询聚集中指定列,且Age > 20

>db.data_sys_log.find().sort({"login_name":1})  升序
>db.data_sys_log.find().sort({"login_name":-1}) 降序           聚集中字段排序

>db.data_sys_log.find().count();          统计聚集中记录条数

>db.data_sys_log.find({"Age":{"$gt":20}).count();    统计聚集中符合条件的记录条数

>db.data_sys_log.find({"login_name":{"$exists":true}}).count()   统计聚集中字段符合条件的记录条数
相当于:select count(login_name) from data_sys_log

>db.data_sys_log.find().limit(5)      查询聚集中前5条记录

>db.data_sys_log.find().skip(10)       查询聚集中第10条以后的记录,就是从11条开始
   
>db.data_sys_log.find().skip(10).limit(5)      查询聚集中第10条记录以后的5条记录

>db.data_sys_log.find({"$or":[{"login_name":/王/},{"role_name":/王/}]},{"login_name":true,"role_name":true})   OR查询
相当于:select login_name,role_name from data_sys_log where login_name like '%王%' or role_name like '%王%'

>db.data_sys_log.insert({"_class":"com.uws.base.model.SysLogMongo","login_name":"测试","role_name":"测试角色","opt_content":"[类名]:com.uws.base.controller.LoginController,[方法]:logout,[参数]:","create_time":"2019-05-21 10:59:10"})         添加新记录

注意:如果不选择库执行,即不use hz_studentroll;
则直接在test库中创建data_sys_log表,插入数据

>db.data_sys_log.update({"login_name":"系统管理员"},{"$set":{"role_name":"管理员"}})     修改记录
注意:配置多条,只会修改一条

>db.data_sys_log.remove({"role_name":"管理员"})                      删除记录
>db.data_sys_log.remove({"age":{$lt:20}})  age<20
$lt         <
$lte        <=
$gt       >
$gte        >=
$ne          !=

>db.data_sys_log.remove()            全部删除
>db.data_sys_log.remove({})
 
>db.data_sys_log.update({},{$set:{source:null}},{multi:1})           给表添加字段

>db.data_sys_log.update({},{$unset:{'source':null}},false,true)         删除表字段

>db.dropDatabase();   #删除当前所在的数据库

> db.user.drop()    #删除user表

>use admin
>db.shutdownServer();  使用数据库命令关闭mongo服务

>mongod --shutdown -f ../mongo.conf    或     >mongod -f ../mongo.conf shutdown     使用mongod命令关闭

>db.test.ensureIndex({"age": 1,"no": 1,"name": 1 })     建立复合索引

>db.tb_user.stats() 查看indexSizes的值    查看索引命名空间

>db.sysLog.dataSize();    查看表数据大小:bytes
 
>db.sysLog.storageSize();    查看表分配大小,包括未使用的空间

>db.sysLog.totalSize();    查看表数据大小,包括索引

>db.sysLog.totalIndexSize();    查看表索引大小


创建集合
  
   方法一:
> use smile; switched to db smile 
> db.createCollection('a') { "ok" : 1 } 
> db.createCollection('b') { "ok" : 1 }

   查看当前数据下的所有集合  
> show collections; a b 
> db.getCollectionNames() [ "a", "b" ]
  
方法二:  
 当插入一个文档的时候,一个集合就会自动创建。
  
> use smile; switched to db smile 
> db.c.insert({name:'smile'}); WriteResult({ "nInserted" : 1 }) 
> db.c.insert({url:'http://blog.nmtui.com'}); WriteResult({ "nInserted" : 1 })

  
   查看创建的合集
> db.getCollectionNames() [ "a", "b", "c" ]

   查看合集里的内容
> db.c.find() { "_id" : ObjectId("5a4cbcea83ec78b7bea904f8"), "name" : "smile" } { "_id" : ObjectId("5a4cbcfc83ec78b7bea904f9"), "url" : "http://blog.nmtui.com" }

  
重命名集合 
> db.c.renameCollection("smile") { "ok" : 1 } 
> db.getCollectionNames() [ "a", "b", "smile" ]

   删除合集
> db.a.drop() true 
> db.getCollectionNames() [ "b", "smile" ]

   插入1w行数据
> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); } WriteResult({ "nInserted" : 1 })

查询集合中的查询所有记录
> db.log.find()
  
注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。

> DBQuery.shellBatchSize=50; # 每页显示50条记录 50 app> db.log.findOne() # 查看第1条记录 app> db.log.count() # 查询总的记录数 app> db.log.find({uid:1000}); # 查询UUID为1000的数据

删除集合中的记录数
> db.log.distinct("name") # 查询去掉当前集合中某列的重复数据 [ "mongodb" ] 
> db.log.remove({}) # 删除集合中所有记录
 WriteResult({ "nRemoved" :  }) > db.log.distinct("name"10000) [ ]

  
查看集合存储信息
> db.log.stats() # 查看数据状态 
> db.log.dataSize() # 集合中数据的原始大小 
> db.log.totalIndexSize() # 集合中索引数据的原始大小 
> db.log.totalSize() # 集合中索引+数据压缩存储之后的大小 
> db.log.storageSize() # 集合中数据压缩存储的大小

pretty()使用
> db.log.find({uid:1000}).pretty() { "_id" : ObjectId("5a4c5c0bdf067ab57602f7c2"), "uid" : 1000, "name" : "mongodb", "age" : 6, "date" : ISODate("2018-01-03T04:28:59.343Z") }