MongoDB简单的配置及应用

一、简介

由于工作需要,最近使用了NoSQL的典型代表——MongoDB数据库。这个在2011年被炒的沸沸扬扬的东东,据说在2010年会成为《2012最受企业欢迎的开发技能Top10》之一。

首先了解几个关键词:

NoSQL:是相对于我们熟知的MS Sql Server和My SQL这种关系型数据库来说的,关系型数据库的最大特点就是遵循范式,就想教科书里定义的一二三范式、BC范式等记不住的公式。

所以,范式用非官方的说法应该是这样的:

第一范式:不能表中套表;

第二范式:每个表有且只有一个主键;

第三范式:表与表之间的关系只能通过外键引用。

No SQL可以翻译为“没有SQL”或者是“Not Only SQL”,即反SQL运动,是一项全新的数据库革命。

随着网络的飞速发展和各种Web2.0网站的兴起,特别是超大规模的和高并发的SNS类型的社交网站和web2.0的纯动态网站已经显得力不从心了,面对海量的数据和几十万、几百万的

访问量和高并发量,暴露出许多难以克服的问题。

正所谓乱世出英雄,在这样的环境中,MongoDB就出现了。

MongoDB:

MongoDB是NoSQL的典型代表。它是一种介于关系型和非关系型数据库之间的产品。它是面向集合的(Collections-Oriented)。与MongoDB同类型的产品有Hadoop等。

二、用法

1、安装服务端

首先,下载安装MongoDB服务端程序,下载地址:http://www.mongodb.org/downloads ;windows环境下下载到是一堆.exe可执行文件。

其次,在安装exe之前,需要手动为MongoDB创建一个存放数据的目录,如 “D:\mongoDB\data\db”;

安装:打开cmd命令行,切换至mongoDB的bin目录,启动mongoDB的服务器:mongod.exe -dbpath "D:\mongoDB\data\" ,效果如图所示:

clipboard

默认端口号:27017

可以通过 localhost:28017查看服务端运行情况。

2、使用客户端管理工具

bin目录下的mongo.exe是MongoDB的客户端工具,以命令行形式对MongoDB进行CRUD以及查看等操作。在cmd下将目录切换至bin目录,运行 mongo.exe即可连上服务端。

常用命令有:

show dbs; //显示所有的数据库

use TestDB;//使用该数据库,注意,MongoDB大小写敏感

show collections;//显示表,在MongoDB中是集合

db; // 显示当前使用的数据库

db.Test.find();//select * from Test

db.Test.remove();//delete from Test

db.Test.count();//select count(*) from Test

db.runCommand({"serverStatus" : 1});  //获取服务端状态

db.test2.update({ "_id" : "2" }, { $inc : {shoe : 1} }) //找到记录并修改,实现自增1的效果

三、.Net下驱动用法

1、首先需要下载MongoDB for C#的驱动,即2个dll文件,MongoDB.Bson.dll和MongoDB.Driver.dll

2、C#的增删改查方法

插入:

static void InsertToCollection1(string word)
{
	// 插入到collection1中
	BsonArray bsonArr = new BsonArray();
	for (int j = 0; j < 5; j++)
	{
		if (!String.IsNullOrEmpty(dict1[word][j]))
		{

			bsonArr.Add(dict1[word][j]);
		}
	}
	QueryDocument query = new QueryDocument("_id", word);
	UpdateDocument update = new UpdateDocument("$set", new BsonDocument("arr", bsonArr));
	collection1.Update(query, update, UpdateFlags.Upsert);

}
更新:
static void Update(string words)
{
	QueryDocument query = new QueryDocument("_id", words);
	// 自增1
	UpdateDocument update = new UpdateDocument("$inc", new BsonDocument("c", 1));
	collection2.Update(query, update);
}

四、MongoDB客户端语法

数据集(表)操作语法

db.test.find({id:10})          返回test数据集ID=10的数据集
db.test.find({id:10}).count()  返回test数据集ID=10的数据总数
db.test.find({id:10}).limit(2) 返回test数据集ID=10的数据集从第二条开始的数据集
db.test.find({id:10}).skip(8)  返回test数据集ID=10的数据集从0到第八条的数据集
db.test.find({id:10}).limit(2).skip(8)  返回test数据集ID=1=的数据集从第二条到第八条的数据
db.test.find({id:10}).sort()   返回test数据集ID=10的排序数据集
db.test.findOne([query])       返回符合条件的一条数据
db.test.getDB()                返回此数据集所属的数据库名称
db.test.getIndexes()           返回些数据集的索引信息
db.test.group({key:...,initial:...,reduce:...[,cond:...]})
db.test.mapReduce(mayFunction,reduceFunction,<optional params>)
db.test.remove(query)                      在数据集中删除一条数据
db.test.renameCollection(newName)          重命名些数据集名称
db.test.save(obj)                          往数据集中插入一条数据
db.test.stats()                            返回此数据集的状态
db.test.storageSize()                      返回此数据集的存储大小
db.test.totalIndexSize()                   返回此数据集的索引文件大小
db.test.totalSize()                        返回些数据集的总大小
db.test.update(query,object[,upsert_bool]) 在此数据集中更新一条数据 
db.test.validate()                         验证此数据集 
db.test.getShardVersion()                  返回数据集共享版本号
db.test.find({'name':'foobar'})    select * from test where name='foobar'
db.test.find()                     select * from test
db.test.find({'ID':10}).count()    select count(*) from test where ID=10
db.test.find({'ID':{$in:[25,35,45]}})  select * from test where ID in (25,35,45)
db.test.find().sort({'ID':-1})      select * from test order by ID desc
db.test.distinct('name',{'ID':{$lt:20}})   select distinct(name) from test where ID<20
select name,sum(marks) from test group by name
db.test.find('this.ID<20',{name:1})     select name from test where ID<20
db.test.insert({'name':'foobar','age':25})  insert into test ('name','age') values('foobar',25)
db.test.insert({'name':'foobar','age':25,'email':'test@163.com'})
db.test.remove({})                   delete * from test
db.test.remove({'age':20})           delete test where age=20
db.test.remove({'age':{$lt:20}})     delete test where age<20
db.test.remove({'age':{$lte:20}})    delete test where age<=20
db.test.remove({'age':{$gt:20}})     delete test where age>20
db.test.remove({'age':{$gte:20}})    delete test where age>=20
db.test.remove({'age':{$ne:20}})     delete test where age!=20
db.test.update({'name':'foobar'},{$set:{'age':36}})  update test set age=36 where name='foobar'
db.test.update({'name':'foobar'},{$inc:{'age':3}})   update test set age=age+3 where name='foobar'
posted on 2012-02-11 16:16  Frank.Fan  阅读(1213)  评论(0编辑  收藏  举报