您的位置:首页 > 数据库 > Mongodb

分布式文档存储数据库 MongoDB 2.0 使用

2012-01-17 16:05 591 查看
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

面向集合存储,易存储对象类型的数据。

模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。

自动处理碎片,以支持云计算层次的扩展性

支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。

文件存储格式为BSON(一种JSON的扩展)

可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB

在32位模式运行时支持的最大文件尺寸为2GB。

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

1.安装MongoDB.

下载mongodb-win32-i386-2.0.0.zip文件(地址:http://downloads.mongodb.org/win32/mongodb-win32-i386-2.0.0.zip),



将其解压至D:\mongodb目录中.创建D:\mongodb\data目录(用于存放数据库文件).



注:BIN目录中有以下2个文件,mongod.exe即服务器端,mongo.exe客户端(在php中用来连接mongodb它进行查询)

2.运行MongoDB

首先我们先运行服务端,打开一个CMD,输入

D:\mongodb\bin>mongod.exe -dbpath D:\mongodb\data

,这时候可以看到以下界面.(不要关掉它,将它注册为系统服务这样就不用每次启动它了).



xampp windows 安装 mongodb 2.0 mongodb使用指南

mongoDB(http://www.mongodb.org)是一种 NoSQL 的文档型的数据库管理系统,也就是说不是传统意义上的关系数据库(类似 Oracle、MS-SQLServer、MySQL等)。传统意义上的关系数据库,数据是被编码为二进制格式保存在表中的,需要用 SQL 语句去存取。 NoSQL 的文档型数据库,比如 mongoDB,就不同了。(官网)

1.安装MongoDB.

下载mongodb-win32-i386-2.0.0.zip文件(地址:http://downloads.mongodb.org/win32/mongodb-win32-i386-2.0.0.zip),



将其解压至D:\xampp\mongodb目录中.创建D:\xampp\mongodb\data目录(用于存放数据库文件).





因为我用的是xampp,所以想选择在此目录,方便管理,你可以随意选择目录。

注:BIN目录中有以下2个文件,mongod.exe即服务器端,mongo.exe客户端(在php中用来连接mongodb它进行查询)

2.运行MongoDB

首先我们先运行服务端,打开一个CMD,输入

D:\xampp\mongodb\bin>mongod.exe -dbpath D:\xampp\mongodb\data

,这时候可以看到以下界面.(不要关掉它,将它注册为系统服务这样就不用每次启动它了).



接着打开一个新的CMD控制台,运行客户端,进入D:\mongodb\bin>mongo.exe目录运行mongo.exe文件。



创建了一个javatest的表

> show dbs ;显示所有数据库(默认连接的是test数据库)

结果:

local

test

> show collections ;显示当前数据库下的使有表

> db.phptest.insert({name:'test',age:'22'}) ;向phptest表中插入数据(若表不存在则会自动创建)

> db.phptset.find() ;显示phptest表中的所有数据

下面重点说明一下update

db.collection.update( criteria, objNew, upsert, multi )

criteria : update的查询条件,类似sql update查询内where后面的

objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 只更新了第一条记录

db.test0.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 全更新了

db.test0.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 只加进去了第一条

db.test0.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 全加进去了

db.test0.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );全更新了

db.test0.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );只更新了第一条

对应的SQL参考:

select a,b from users where age=33

db.users.find({age:33},{a:1,b:1})

select * from users where age>33 and age<=40

db.users.find({'age':{$gt:33,$lte:40}})

select * from users order by name DESC

db.users.find().sort({name:-1})

create index myindexname on users(name)

db.users.ensureIndex({name:1})

update users set a=1 where b='q'

db.users.update({b: 'q'},{$set:{a:1}},false,true)

delete from users where z='abc'

db.users.remove({ z: 'abc'})

自已写的更新语句:

db.phptest.update({name:'test'},{$set:{age:1000}});

db.phptest.find();

"_id" : ObjectId("4e70328395d1383e16a34669"), "age" : 1000, "name" : "test" }

"_id" : ObjectId("4e705c63ed3cf02246b9116a"), "name" : "abc", "age" : "33" }


3下面推荐几款Mongodb客户端管理工具

Try MongoDB

不用安装就可以试用MongoDB,和tryredis一样,是一个基于web的shell模拟工具,可以让你在不用安装MongoDB的情况下试用MongoDB的各种功能.

Mongo3 – MongoDB 集群管理工具

MongoVUE

一个windows下的客户端管理工具,我推荐这个,非常不错.有点类似于mysql管理工具..



4,Mongodb 与sql 语句对照
此处用mysql中的sql语句做例子,C# 驱动用的是samus,也就是上文中介绍的第一种.

引入项目MongoDB.dll

//创建Mongo连接

var mongo = new Mongo("mongodb://localhost");

mongo.Connect();

//获取一个数据库,如果没有会自动创建一个

var db = mongo.GetDatabase("movieReviews");

//创建一个列表,并为这个列表创建文档

var movies = db.GetCollection("movies");


连接没问题之后,现在让我们用mysql 与mongodb的一些语句做下对比:

MongoDBMysql
查询全部movies.find(new Document())SELECT * FROM movies
条件查询movies.Find(new Document { { "title", "Hello Esr" } });SELECT * FROM movies WHERE title= 'foobar'
查询数量movies.Find(new Document { { "title", "测试2" } }).Documents.Count();SELECT COUNT(*) FROM movies WHERE `title` = 'foobar'
数量范围查询1, movies.Find(new Document().Add("$where", new Code("this.num > 50")));

2, movies.Find(new Document().Add("num", new Document().Add("$gt",50)));

($gt : > ; $gte : >= ; $lt : < ; $lte : <= ; $ne : !=)

3,movies.Find("this.num > 50");

4,movies.Find(new Document().Add("$where",new Code("function(x){ return this.num > 50};")));
select * from movies where num > 50
分页查询movies.Find(new Document()).Skip(10).Limit(20);SELECT * FROM movies limit 10,20
查询排序语句movies.Find(new Document()).Sort(new Document() { { "num", -1 } });SELECT * FROM movies ORDER BY num DESC
查询指定字段movies.Find(new Document().Add("num", new Document().Add("$gt", 50)), 10, 0, new Document() { { "title", 1 } });select title from movies where num > 50
插入语句movies.Insert(new Document() { { "title", "测试" }, { "resuleData", DateTime.Now } });INSERT INOT movies (`title`, `reauleDate`) values ('foobar',25)
删除语句movies.Remove(new Document() { { "title", "Hello Esr" } });DELETE * FROM movies
更新语句movies.Update(new Document() { { "title", "测试2" } }

, new Document() { { "title", "测试11111" } });

UPDATE movies SET `title` = ‘测试1111’ WHERE `title` = '测试1111'
Linq查询(from item in db.GetCollection("movies").Linq()

where ((string)item["title"]).StartsWith("Esr")

select item);

select * from movies where title like ‘%Esr’
这里只举出了几个比较典型的例子,可以这么说,只要mysql可以完成的sql语句,在mongodb里面都可以实现.

5.Mongodb java版驱动下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: