MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
关于mongodb的安装过程,网上已有很多资料,这里不再多说,在此记录一下我遇到过的mongodb的用法,以备日后翻阅。
一、基础操作。
1、连接到mongodb数据库
mongo #在命令行直接进入mongodb mongo 127.0.0.1 #连接到ip为127.0.0.1的mongodb mongo 127.0.0.1 27017 #连接到ip为127.0.0.1的mongodb mongo --port 27017 --host 127.0.0.1
连接成功后,会出现如下结果,默认连接到mongodb一个名为test的测试数据库
MongoDB shell version: 2.6.0 connecting to: 127.0.0.1:27017/test
2、基本的系统操作,在mongodb里,db为数据库,collection为一个集合,相当于关系型数据库中的table
show dbs #查看当前所有的数据库 user xx #选中名为xx的数据库 db #查看当前选中数据库的信息 show collections #查看当前数据库下所有的collections
二、常用的查询操作。
在mongodb里,所有的操作均以db 命令开头,后面跟着对应操作的collection
1、创建数据库,如果现在要创建一个名为example的数据库,可以使用 use example的命令
use example switched to db example
注意,现在数据库还没有真正的创建,使用show dbs命令是无法看到example的,这是因为目前example数据库内还没有任何集合(collection),没有任何数据,只有等创建collection插入数据后,数据库才会被创建。
接下来创建一个名为users的collection,然后插入数据,完成后,example数据库才算是真正的创建成功,使用show dbs可以看到。
db.users.insert({'name':'john'}) WriteResult({ "nInserted" : 1 })
在创建成功后,系统会默认创建一个system_indexs的集合(系统索引),在example数据库使用show collections命令即可看到。
对collection的一些操作,同传统关系型数据库一样,可以对mongodb里面的数据按照各种查询,包括等于、大于、小于、包含、不包含 等,按照字段进行排序等。
db.users.find() #查询所有数据 db.users.find({'name':'john'}) #查询所有name为john的数据,里面可以使用任意条件 db.users.findOne() #查询一条数据 db.users.findOne({'age':'18'}) #使用条件查询一条数据 db.users.find({'age':'18'}).limit(1) #使用条件查询一条数据 db.users.find().sort({'name':1}) #对查询结果按照name字段正序排序 db.users.find().sort({'name':-1}) #对查询结果按照name字段倒序排序 db.users.find({'name':{$gt:'jack'}}) #查询name字段大于jack的数据
还可以使用in或者or查询
db.users.find({'name':{'$in':['john','jack']}}) #查询name为jack 或者john的数据 db.users.find({'name':{'$or':['john','jack']}}) db.users.find({'name':{'$ne':'john'}}) #查询name不为john的数据
在不需要查询所有字段的时候,可以查询某些指定的字段,或者过滤某些指定的字段。
db.users.find() #默认情况下是返回所有数据的db.users.find({},{'name':0}) #在返回结果中过滤掉name字段db.users.find({},{'name':1}) #在返回结果中只保留字段(注:_id字段是默认显示的,即使设置了其他字段为1的情况,_id字段也会显示) { "_id" : ObjectId("53a53e40698c51ca0490f30e"), "name" : "john" } { "_id" : ObjectId("53a53f84698c51ca0490f30f"), "name" : "jack" } db.users.find({},{'name':1,'_id':0}) #在返回结果中只保留name字段,并且过滤掉_id字段 { "name" : "john" } { "name" : "jack" }
三、其他操作(删除修改等,以后再说吧,因为是做的日志分析,暂时没这些需求,主要是查询,:) 如果有了以后再说吧)
附:mongodb与关系型数据库的CRUD对照表 Mongodb的基本查询操作