1 MongoDB简介
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。
mongodb中有三元素:数据库,集合,文档,其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”。
主要特性:
-
面向集合存储,易存储对象类型的数据 “面向集合”(Collenction-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。
-
模式自由 模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里.
2 安装
2.1 下载安装包
安装包,根据你的系统选择32位/64位。关于版本,有两个问题要注意:
-
偶数为“稳定版”(如:1.6.X,1.8.X),奇数为“开发版”(如:1.7.X,1.9.X),这两个版本的区别相信大家都知道吧。
-
32bit的mongodb最大只能存放2G的数据,64bit就没有限制。
解压安装包,放到你希望存放的文件夹下,例如我的是D:\software\mongodb
,
2.2 指定数据库路径
在D:\software\mongodb
文件夹下创建db目录,用来存放数据库数据。
在dos框里使用mongod命令初始化dbpath
正常情况下,到这里你就已经安装完成了。
2.3 安装MongoVUE
这个软件是mongodb的一个可视化工作平台,使你可以免于使用mongodb命令行操作完成一部分功能,并且还可以看到数据库的内容,类似于这样的视图,非常方便。 你可以到这里下载.
3 基本操作
新打开一个dos框,输入mongo命令打开shell,其实这个shell就是mongodb的客户端,,默认连接的是“test”数据库。
3.1 insert
我们已经连到了test数据库,接下来创建一个集合,可以理解为关系型数据库中的一张表,这里就取集合名为“person”,要注意的就是文档是一个json的扩展(Bson)形式。这里我们为集合取名为person.
db.person.insert({"name":"jack","age":20})
db.person.insert({"name":"joe","age":25})
注意,mongodb会为每个记录生成一个“_id":这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性。
3.2 find
db.person.find({"name":"joe"})
3.3 update
db.person.update({"name":"joe"},{"name":"joe","age":30})
很显然,第一个参数是查找条件,第二个参数是将满足查找条件的记录替换成当前值。
3.4 remove
db.person.remove({"name":"joe"})
注意remove()函数如果没有传进参数,则会删除全部记录,并且不可恢复,因此一定要小心。
下图演示了上面的几步操作:
4 在python里访问mongodb
相比上面在shell里面操作数据库,更多的时候,我们是在程序里面访问数据库,比如创建表,存储,查找等。首先是在python里import pymongo,这是一个第三方库,你需要自己安装。下面是我写的一个小例子程序,包含了pymongo的常用API.
import os
import json
import pymongo
HOST = '127.0.0.1'
PORT = 27017
def parse(yelp_dir):
filename = yelp_dir
f = open(filename,'r')
for eachLine in f:
content_dict = dict()
content_dict = json.loads(eachLine)
conn = pymongo.Connection(HOST,PORT) //建立连接,参数是IP和端口号
db = conn.yelp.user //创建了一个名为yelp的数据库,并在其下创建名为user的集合
db.save(content_dict) //将数据存到刚刚建立的集合里
f.close()
db.insert({"city":"Buffalo","state":"New York"}) //插入记录
db.remove({"city":"Buffalo","state":"New York"}) //删除满足条件的记录
db.find({"state":"AZ"}).count() //查看记录的统计次数
db.find({"state":"AZ"}).sort("city") //对查找结果按city字段排序
db.update({"city":"Buffalo"},{"$set":{"Email":"libing@126.com","Password":"123"}})
for item in db.find():
print item["city"]
if(db.find_one({"city":"Yuma", "state":"AZ"})):
print 'oops,got the city!'
//在集合里查找city字段为Yuma,state字段为AZ的记录,找到就输出
5 更高级的mongodb操作
5.1 find
$gt, $gte, $lt, $lte, $ne 分别表示>,>=,<,<=,!=
db.person.find({"age":{$gt:35}})
5.3 支持正则表达式
db.person.find({"name":/^j/,"name":/e$/})
5.2 支持 where
有时查询很复杂,很蛋疼,不过没关系,mongodb给我们祭出了大招,它就是$where,
db.person.find({$where:funtion(){return this.name=="jack"}})
Comments !