MongoDB--命令

MongoDB命令行操作
 
本文专门介绍MongoDB的命令行操作。其实,这些操作在MongoDB官网提供的Quick Reference上都有,但是英文的,为了方便,这里将其稍微整理下,方便查阅。
 
这里用来做测试的是远端(10.77.20.xx)的Mongo 数据库
 
1、登录和退出
 
mongo命令直接加MongoDB服务器的IP地址(比如:mongo 10.77.20.xx),就可以利用Mongo的默认端口号(27017)登陆Mongo,然后便能够进行简单的命令行操作。
至于退出,直接exit,然后回车就好了。
 
[plain] 
$ mongo 10.77.20.xx  
MongoDB shell version: 2.0.4  
connecting to: 10.77.20.xx/test  
> show collections  
> exit  
bye  
从以上可以看出,登录后mongo会自动连上一个名为test的数据库。如果这个数据库不存在,那么mongo会自动建立一个名为test的数据库。上面的例子,由于Mongo服务器上没有名为test的db,因此,mongo新建了一个空的名为test的db。其中,没有任何collection。
2、database级操作
 
[plain] 
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级操作
 
[plain] 
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})  
4、Record级的操作
这一小节从这里开始,我们用事先存在的blogtest数据库做测试,其中有两个Collection,一个是book,另一个是user。
4.1 插入操作
 
[plain] 
4.1.1 向user集合中插入两条记录  
> db.user.insert({'name':'Gal Gadot','gender':'female','age':28,'salary':11000})  
> db.user.insert({'name':'Mikie Hara','gender':'female','age':26,'salary':7000})  
  
4.1.2 同样也可以用save完成类似的插入操作  
> db.user.save({'name':'Wentworth Earl Miller','gender':'male','age':41,'salary':33000})  
4.2 查找操作
 
4.2.1 查找集合中的所有记录
[plain] 
> db.user.find()  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13 }  
4.2.2 查找集合中的符合条件的记录
[plain] 
(1)单一条件  
a)Exact Equal:  
查询age为了23的数据  
> db.user.find({"age":23})  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
b)Great Than:  
查询salary大于5000的数据  
> db.user.find({salary:{$gt:5000}})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
c)Fuzzy Match  
查询name中包含'a'的数据  
> db.user.find({name:/a/})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
查询name以G打头的数据  
> db.user.find({name:/^G/})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
  
(2)多条件"与"  
查询age小于30,salary大于6000的数据  
> db.user.find({age:{$lt:30},salary:{$gt:6000}})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
  
(3)多条件"或"  
查询age小于25,或者salary大于10000的记录  
> db.user.find({$or:[{salary:{$gt:10000}},{age:{$lt:25}}]})  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
4.2.3 查询第一条记录
将上面的find替换为findOne()可以查找符合条件的第一条记录。
[plain] 
将上面的find替换为findOne()可以查找符合条件的第一条记录。  
> db.user.findOne({$or:[{salary:{$gt:10000}},{age:{$lt:25}}]})  
{  
    "_id" : ObjectId("52442736d8947fb501000001"),  
    "name" : "lfqy",  
    "gender" : "male",  
    "age" : 23,  
    "salary" : 15  
}  
4.2.4 查询记录的指定字段
[plain] 
查询user集合中所有记录的name,age,salary,sex_orientation字段  
> db.user.find({},{name:1,age:1,salary:1,sex_orientation:true})  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
注意:这里的1表示显示此列的意思,也可以用true表示。  
4.2.5 查询指定字段的数据,并去重。
[plain] 
查询gender字段的数据,并去掉重复数据  
> db.user.distinct('gender')  
[ "male", "female" ]  
4.2.6 对查询结果集的操作
[plain] 
(1)Pretty Print  
为了方便,mongo也提供了pretty print工具,db.collection.pretty()或者是db.collection.forEach(printjson)  
> db.user.find().pretty()  
{  
    "_id" : ObjectId("52442736d8947fb501000001"),  
    "name" : "lfqy",  
    "gender" : "male",  
    "age" : 23,  
    "salary" : 15  
}  
{  
    "_id" : ObjectId("52453cfb25e437dfea8fd4f4"),  
    "name" : "Gal Gadot",  
    "gender" : "female",  
    "age" : 28,  
    "salary" : 11000  
}  
{  
    "_id" : ObjectId("52453d8525e437dfea8fd4f5"),  
    "name" : "Mikie Hara",  
    "gender" : "female",  
    "age" : 26,  
    "salary" : 7000  
}  
{  
    "_id" : ObjectId("52453e2125e437dfea8fd4f6"),  
    "name" : "Wentworth Earl Miller",  
    "gender" : "male",  
    "age" : 41,  
    "salary" : 33000  
}  
{  
    "_id" : ObjectId("52454155d8947fb70d000000"),  
    "name" : "not known",  
    "sex_orientation" : "male",  
    "age" : 13  
}  
(2)指定结果集显示的条目  
a)显示结果集中的前3条记录  
> db.user.find().limit(3)  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
b)查询第1条以后的所有数据  
> db.user.find().skip(1)  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值