zoukankan      html  css  js  c++  java
  • 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'
  • 相关阅读:
    信息安全系统设计基础第九周学习总结
    信息安全系统设计基础第八周期中总结
    信息安全系统设计基础第七周学习总结
    深入理解计算机系统第六章家庭作业之6.35 6.36
    深入理解计算机系统第二、三章家庭作业之2.64 2.65 3.66 3.68
    信息安全系统设计基础第六周学习总结
    信息安全系统设计基础第五周学习总结
    JAVA 之 多态 抽象 接口
    JAVA 之 继承
    java.lang 类String
  • 原文地址:https://www.cnblogs.com/fanyong/p/2346794.html
Copyright © 2011-2022 走看看