MongoDB (from "humongous") 是一个可扩展的,高效的,面向文档的数据库。它的作用是介于关系数据库与key-value数据库之间的一种数据库。它具有如下几个特点:
面向文档的存储结构:它底层是用一种叫JSON的结构来做为基本的存储单元,以此来提供动态的Schema,对任意属性的索引支持数据冗余与高可用性数据的自动分片丰富的查询模式支持Map/Reduce数据流处理基于GridFS的文件存储系统
下面是一个单机配置MongoDB的例子,是参考http://www.mongodb.org/display/DOCS/Quickstart+Unix写的
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz . $ tar xzvf http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz
$ sudo mkdir -p /data/db $ sudo chown `id -u`:`id-u` /data/db
上面是建立MongoDB启动时的默认数据库地址,你也可以在启动MongoDB的时候加--dbpath参数来指定数据库的路径
启动数据库
$ ./mongodb-xxxxxxx/bin/mongod
启动客户端连接上数据库,默认服务是打开27017这个端口的,你也可以加--port参数来指定端口号
$ ./mongodb-xxxxxxx/bin/mongo > db.foo.save({a:1}) > db.foo.find()
首先打开一个MongoDB的JS shell
$ bin/mongo
这个客户端默认是去连接本地的27017端口的,你可以用 bin/mongo ip:port的形式来指定IP与端口号
> use mydb
这是转到你所使用的数据库上,这与mysql是一样的
3.2 插入数据
> j = { name : "mongo" }; {"name" : "mongo"} > t = { x : 3 }; { "x" : 3 } > db.things.save(j); > db.things.save(t); > db.things.find(); // 遍历表things中的所有数据 { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" } { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 } >
这是的"_id"字段是数据库自动增加的
> for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i}); // 批量插入 > db.things.find(); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" } { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 } .... { "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 } has more
使用游标来操作数据集
> var cursor = db.things.find(); > while (cursor.hasNext()) printjson(cursor.next()); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" } { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 } .... { "_id" : ObjectId("4c220a42f3924d31102bd85e"), "x" : 4, "j" : 9 }
返回指定的字段数据
SELECT * FROM things WHERE name="mongo" ------- > db.things.find({name:"mongo"}).forEach(printjson); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" } 返回指定的数据个数 > db.things.find().limit(3); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" } { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 } { "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }
当然,MongoDB支持一些更加复杂的查询,如OR,AND,Group by等,可以参考如下
http://www.mongodb.org/display/DOCS/Manual
http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
$ git clone git://github.com/mongodb/mongo-python-driver.git pymongo $ cd pymongo/ $ python setup.py install
>>> import pymongo import Connection >>> connection = Connection() 你也可以指定IP与端口号 >>> connection = Connection('localhost',27017) 得到一个数据库 >>> db = connection.test_database 或者用这种方式 >>> db = connection['test_database'] 得到一个数据集 >>> collection = db.test_collection 插入数据 >>> post = {"author":"bob"} >>> posts = db.posts >>> posts.insert(post)/ 输出所有posts表中的数据 >>> for post in posts.find(): >>> post
http://www.mongodb.org/#
http://api.mongodb.org/python/1.9+/index.html
http://www.mongodb.org/display/DOCS/Drivers