本文专门介绍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,然后回车就好了。
- $ mongo 10.77.20.xx
- MongoDB shell version: 2.0.4
- connecting to: 10.77.20.xx/test
- > show collections
- > exit
- bye
2、database级操作
- 2.1 查看服务器上的数据库
- > show dbs
- admin (empty)
- back_up (empty)
- blogtest 0.203125GB
- local 44.056640625GB
- test (empty)
- 2.2 切换数据库
- 切换到blogtest数据库(从默认的test数据库)
- > use blogtest
- switched to db blogtest
- mongo中,db代表当前使用的数据库。这样,db就从原来的test,变为现在的blogtest数据库。
- 2.3 查看当前数据库中的所有集合
- > show collections
- book
- system.indexes
- user
- 2.4 创建数据库
- mongo中创建数据库采用的也是use命令,如果use后面跟的数据库名不存在,那么mongo将会新建该数据库。不过,实际上只执行use命令后,mongo是不会新建该数据库的,直到你像该数据库中插入了数据。
- > use test2
- switched to db test2
- > show dbs
- admin (empty)
- back_up (empty)
- blogtest 0.203125GB
- local 44.056640625GB
- test (empty)
- 到这里并没有看到刚才新建的test2数据库。
- > db.hello.insert({"name":"testdb"})
- 该操作会在test2数据库中新建一个hello集合,并在其中插入一条记录。
- > show dbs
- admin (empty)
- back_up (empty)
- blogtest 0.203125GB
- local 44.056640625GB
- test (empty)
- test2 0.203125GB
- > show collections
- hello
- system.indexes
- 这样,便可以看到mongo的确创建了test2数据库,其中有一个hello集合。
- 2.5 删除数据库
- > db.dropDatabase()
- { "dropped" : "test2", "ok" : 1 }
- > show dbs
- admin (empty)
- back_up (empty)
- blogtest 0.203125GB
- local 44.056640625GB
- test (empty)
- 2.6 查看当前数据库
- > db
- test2
- 可以看出删除test2数据库之后,当前的db还是指向它,只有当切换数据库之后,test2才会彻底消失。
3、collection级操作
- 3.1 新建collection
- > db.createCollection("Hello")
- { "ok" : 1 }
- > show collections
- Hello
- system.indexes
- 从上面2.4也可以看出,直接向一个不存在的collection中插入数据也能创建一个collection。
- > db.hello2.insert({"name":"lfqy"})
- > show collections
- Hello
- hello2
- system.indexes
- 3.2 删除collection
- > db.Hello.drop()
- true
- 返回true说明删除成功,false说明没有删除成功。
- > db.hello.drop()
- false
- 不存在名为hello的collection,因此,删除失败。
- 3.3 重命名collection
- 将hello2集合重命名为HELLO
- > show collections
- hello2
- system.indexes
- > db.hello2.renameCollection("HELLO")
- { "ok" : 1 }
- > show collections
- HELLO
- system.indexes
- 3.4 查看当前数据库中的所有collection
- >show collections
- 3.5 索引操作
- 在HELLO集合上,建立对ID字段的索引,1代表升序。
- >db.HELLO.ensureIndex({ID:1})
- 在HELLO集合上,建立对ID字段、Name字段和Gender字段建立索引
- >db.HELLO.ensureIndex({ID:1,Name:1,Gender:-1})
- 查看HELLO集合上的所有索引
- >db.HELLO.getIndexes()
- 删除索引用db.collection.dropIndex(),有一个参数,可以是建立索引时指定的字段,也可以是getIndex看到的索引名称。
- >db.HELLO.dropIndex( "IDIdx" )
- >db.HELLO.dropIndex({ID:1})
- 3.6 为集合中的每一条记录添加一个字段
- 为user集合中的每一条记录添加一个名为ex的字段,并赋值为barrymore
- db.user.update({},{$set:{"ex":"barrymore"}},false,true)
- 3.7 重命名字段
- 将集合中的所有记录的gender字段的名字修改为sex
- db.user.update({},{$rename:{"gender":"sex"}},false,true)
- 3.8 删除字段
- 删除集合中所有记录的ex字段
- 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,就把按条件查出来多条记录全部更新。