MongoDB

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"}})

5.3 $set修改器

5.4 update

Comments !