MongoDB命令行操作

本文专门介绍MongoDB的命令行操作,分上,下两篇(其实本来是一篇,后来太长,于是拆之)。下篇介绍Record级别的操作,上篇介绍除Record以外的操作,如对database和collection的操作等。

其实,这些操作在MongoDB官网提供的Quick Reference上都有,但是英文的,为了方便,这里将其稍微整理下,方便查阅。

这里用来做测试的是远端(10.77.20.xx)的Mongo数据库。

1、登录和退出

mongo命令直接加MongoDB服务器的IP地址(比如:mongo 10.77.20.xx),就可以利用Mongo的默认端口号(27017)登陆Mongo,然后便能够进行简单的命令行操作。

至于退出,直接exit,然后回车就好了。

[plain]  view plain copy
  1. $ mongo 10.77.20.xx  
  2. MongoDB shell version: 2.0.4  
  3. connecting to: 10.77.20.xx/test  
  4. > show collections  
  5. > exit  
  6. bye  
从以上可以看出,登录后mongo会自动连上一个名为test的数据库。如果这个数据库不存在,那么mongo会自动建立一个名为test的数据库。上面的例子,由于Mongo服务器上没有名为test的db,因此,mongo新建了一个空的名为test的db。其中,没有任何collection。

2、database级操作

[plain]  view plain copy
  1. 2.1 查看服务器上的数据库  
  2. > show dbs  
  3. admin   (empty)  
  4. back_up (empty)  
  5. blogtest    0.203125GB  
  6. local   44.056640625GB  
  7. test    (empty)  
  8.   
  9. 2.2 切换数据库  
  10. 切换到blogtest数据库(从默认的test数据库)  
  11. > use blogtest  
  12. switched to db blogtest  
  13. mongo中,db代表当前使用的数据库。这样,db就从原来的test,变为现在的blogtest数据库。  
  14.   
  15. 2.3 查看当前数据库中的所有集合  
  16. > show collections  
  17. book  
  18. system.indexes  
  19. user  
  20.   
  21. 2.4 创建数据库  
  22. mongo中创建数据库采用的也是use命令,如果use后面跟的数据库名不存在,那么mongo将会新建该数据库。不过,实际上只执行use命令后,mongo是不会新建该数据库的,直到你像该数据库中插入了数据。  
  23. > use test2  
  24. switched to db test2  
  25. > show dbs  
  26. admin   (empty)  
  27. back_up (empty)  
  28. blogtest    0.203125GB  
  29. local   44.056640625GB  
  30. test    (empty)  
  31. 到这里并没有看到刚才新建的test2数据库。  
  32. > db.hello.insert({"name":"testdb"})  
  33. 该操作会在test2数据库中新建一个hello集合,并在其中插入一条记录。  
  34. > show dbs  
  35. admin   (empty)  
  36. back_up (empty)  
  37. blogtest    0.203125GB  
  38. local   44.056640625GB  
  39. test    (empty)  
  40. test2   0.203125GB  
  41. > show collections  
  42. hello  
  43. system.indexes  
  44. 这样,便可以看到mongo的确创建了test2数据库,其中有一个hello集合。  
  45.   
  46. 2.5 删除数据库  
  47. > db.dropDatabase()  
  48. { "dropped" : "test2", "ok" : 1 }  
  49. > show dbs  
  50. admin   (empty)  
  51. back_up (empty)  
  52. blogtest    0.203125GB  
  53. local   44.056640625GB  
  54. test    (empty)  
  55.   
  56. 2.6 查看当前数据库  
  57. > db  
  58. test2  
  59. 可以看出删除test2数据库之后,当前的db还是指向它,只有当切换数据库之后,test2才会彻底消失。  

3、collection级操作

[plain]  view plain copy
  1. 3.1 新建collection  
  2. > db.createCollection("Hello")  
  3. { "ok" : 1 }  
  4. > show collections  
  5. Hello  
  6. system.indexes  
  7. 从上面2.4也可以看出,直接向一个不存在的collection中插入数据也能创建一个collection。  
  8. > db.hello2.insert({"name":"lfqy"})  
  9. > show collections  
  10. Hello  
  11. hello2  
  12. system.indexes  
  13.   
  14. 3.2 删除collection  
  15. > db.Hello.drop()  
  16. true  
  17. 返回true说明删除成功,false说明没有删除成功。  
  18. > db.hello.drop()  
  19. false  
  20. 不存在名为hello的collection,因此,删除失败。  
  21.   
  22. 3.3 重命名collection  
  23. 将hello2集合重命名为HELLO  
  24. > show collections  
  25. hello2  
  26. system.indexes  
  27. > db.hello2.renameCollection("HELLO")  
  28. { "ok" : 1 }  
  29. > show collections  
  30. HELLO  
  31. system.indexes  
  32.   
  33. 3.4 查看当前数据库中的所有collection  
  34. >show collections  
  35.   
  36. 3.5 索引操作  
  37. 在HELLO集合上,建立对ID字段的索引,1代表升序。  
  38. >db.HELLO.ensureIndex({ID:1})  
  39. 在HELLO集合上,建立对ID字段、Name字段和Gender字段建立索引  
  40. >db.HELLO.ensureIndex({ID:1,Name:1,Gender:-1})  
  41. 查看HELLO集合上的所有索引  
  42. >db.HELLO.getIndexes()  
  43. 删除索引用db.collection.dropIndex(),有一个参数,可以是建立索引时指定的字段,也可以是getIndex看到的索引名称。  
  44. >db.HELLO.dropIndex( "IDIdx" )  
  45. >db.HELLO.dropIndex({ID:1})  
  46.   
  47. 3.6 为集合中的每一条记录添加一个字段  
  48. 为user集合中的每一条记录添加一个名为ex的字段,并赋值为barrymore  
  49. db.user.update({},{$set:{"ex":"barrymore"}},false,true)  
  50.   
  51. 3.7 重命名字段  
  52. 将集合中的所有记录的gender字段的名字修改为sex  
  53. db.user.update({},{$rename:{"gender":"sex"}},false,true)  
  54.   
  55. 3.8 删除字段  
  56. 删除集合中所有记录的ex字段  
  57. db.user.update({},{"$unset":{"ex":1}},false,true)  

上面的操作中用到了一个比较常用的update方法,其参数格式如下:

db.collection.update(criteria, objNew, upsert, multi )
criteria:update的查询条件,类似sql update查询内where后面的
objNew:update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的。
upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值