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'
  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/fanyong/p/2346794.html
Copyright © 2011-2022 走看看