mongodb命令整理

服务器

浏览数:68

2019-11-2

1.连接mongodb

mongo 远程主机ip或DNS:MongoDB端口号/数据库名 -u user -p password
e.g.: mongo 192.168.1.200:27017/test -u user -p password
若在安装mongo的服务器上访问本地mongo,可直接执行 mongo 

2.shell基本操作命令

show dbs:显示数据库列表 
show collections:显示当前数据库中的集合(类似关系数据库中的表) 
show users:显示用户
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 
db.help():显示数据库操作命令,里面有很多的命令 
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合(表),并非真正意义上的命令 
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
db.foo.find({a:1},{column:0}) :后面的大括号代表返回字段过滤,column为列名,0代表只去掉该字段,1代表只保留该字段
cls 清屏

3.增

db.foo.insert({ "userId" : "testcustomer"}) 

4.删

--删除指定条件的数据
db.foo.remove({"userId" : "testcustomer"})
--清空表
db.foo.remove({})
--删除表
db.foo.drop()
--删除数据库
db.dropDatabase()
--注意,删除操作是永久性的,不可恢复的,所以删除前应该使用find确认删除数据

--另,mongodb删除集合后磁盘空间不释放,用db.repairDatabase()去修复才能释放。但是在修复的过程中如果出现了非正常的mongodb的挂掉,再次启动时启动不了的,需要先修复才可以,可以利用./mongod --repair --dbpath=/data/mongo/,如果你是把数据库单独的放在一个文件夹中指定dbpath时就指向要修复的数据库就可以,修复可能要花费很长的时间,在使用db.repairDatabase()去修复时一定要停掉读写,并且mongodb要有备机才可以,不然千万不要随便使用db.repairDatabase()来修复数据库,切记。
回收磁盘空间可以参考:http://blog.csdn.net/mchdba/article/details/8894344

5.改

db.foo.update({"userId" : "ordinary"},{'$set':{"usermail" : "2012@qq.cn"}})

6.查

–此处主要记录特殊查询,mongodb语句和mysql sqlserver不同

大于,小于,大于等于,小于等于

$gt 大于   >
$lt 小于    <
$gte  大于等于  >=
$lte  小于等于  <=

e.g. 
db.collection.find({age:{$gt:18}});  //年龄大于不包含18岁
SQL:SELECT * FROM Collection WHERE age>18

不等于

$ne 不等于 noe equals

e.g. 
db.collection.find({age:{$ne:18}})  ;//年龄不等于18

in , not in

--in,not in
$in,$nin

e.g.
db.collection.find({field:{$in:array}});
db.collection.find({field:{$nin:array}});

是否存在

$exists

e.g.
db.collection.find({title:{$exists:true}});  //如果记录中有包含title属性的全部返回
db.collection.find({title:{$exists:false}}); //如果记录中有包含title属性的全部不返回,不包含title属性的全部返回

正则表达式

db.collection.find( { name : /acme.*corp/i } ); // 后面的i的意思是区分大小写

非查询

$not

e.g. 
db.collection.find( { name : { $not : /acme.*corp/i } } );

匹配内数组内的元素

$elemMatch

e.g.
如果对象有一个元素是数组,那么$elemMatch可以匹配内数组内的元素
> t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } ) 

{ "_id" : ObjectId("4b57833003340000999"),"x":[{"a":1,"b":3},7,{"b":99}, {"a":11}]}
$elemMatch : { a : 1, b : { $gt : 1 } } 所有的条件都要匹配上才行。

区别于

t.find( { "x.a" : 1, "x.b" : { $gt : 1 } } )

$elemMatch是匹配{ "a" : 1, "b" : 3 },而后面一句是匹配{ "b" : 99 }, { "a" : 11 } 

备份与恢复

mongodump -d test   备份数据库test到当前目录

mongorestore --drop   备份恢复

作者:一只刚刚开始吃猫粮的运维狗