NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。非关系型的数据存储

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB有数据库、集合、文档三个基本概念分别相当于关系数据库中的数据库、表、行。

一、MongoDB安装

MongoDB官网下载地址:https://www.mongodb.org/downloads

下载完成后点击mongodb-win32-x86_64-2008plus-ssl-3.2.0-signed.msi安装,傻瓜式下一步安装就可以,默认装到 C:\Program Files\MongoDB\Server\3.2\bin 下。

微软徽标+R,输入cmd如下命令:

”cd C:\Program Files\MongoDB\Server\3.2\bin“ --version    返回MongoDB shell version:3.2.0  说明安装成功。

在浏览器里面键入“http://localhost:27017/,出现如下界面,也说明安装成功。

安装成功后为了方便将mongodb的命令加入到环境变量PATH中

我的电脑-->右键-->属性;如下图:

正确添加后,cmd直接输入mongo --version 返回MongoDB shell version:3.2.0

二、创建数据目录、日志目录

MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它(data、db、log文件夹不创建会下面会报错,)。

数据目录:C:\Program Files\MongoDB\data\db

日志目录:C:\Program Files\MongoDB\log\log.txt

执行如下命令:

mongod --dbpath "C:\Program Files\MongoDB\data\db" --logpath "C:\Program Files\MongoDB\log\log.txt" --logappend

三、将MongoDB服务器作为Windows服务运行

执行如下命令:

mongod  --dbpath "C:\Program Files\MongoDB\data\db" --logpath "C:\Program Files\MongoDB\log\log.txt" --logappend --directoryperdb --serviceName MongoDB --install

删除服务:mongod.exe --remove --serviceName "MongoDB"

作为Windows服务启动不了报错:Windows不能在本地计算机启动MongoDB,错误代码 100

解决方法 :

1、MongoDB安装目录\data\将此文件夹下的mongod.lock删除

2、检查设置数据目录dbpath或日志目录logpath是否正确

四、MongoDB的CURD操作

(-)命令操作

1、插入--cmd,输入mongo命令打开shell,使用testdb。文档必须是一个json的扩展(Bson)形式

db.person.insert({"name":"joye888","age":"25"})

db.person.insert({"name":"joye888","age":"26"})

2、查询-- “_id": 数据库加的GUID主键

db.person.find()

3、修改

update({查询条件},{需要修改的内容})

4、删除

db.person.remove({}) -- 删除所有

db.person.remove({"name":"joye888"})--根据条件删除

(二)非命令操作

构造bsonDcument插入

方式1,直接构造:

 MongoServer dbserver = new MongoClient(connectionStr).GetServer();
MongoDatabase db = dbserver.GetDatabase(dbName);
MongoCollection collection = db.GetCollection(collectionName);
dbserver.Connect(); BsonDocument doc = new BsonDocument(); doc["Age"] = Int32.Parse(txt_Age.Text);
doc["Name"] = txt_Name.Text;
doc["Num"] = txt_Num.Text;
doc["Introduction"] = txt_Introduction.Text; collection.Insert(doc);

方式2,通过实体构造:

var student = new Student
{
Age = Int32.Parse(txt_Age.Text),
Name = txt_Name.Text,
Num = txt_Num.Text,
Introduction = txt_Introduction.Text
}; collection.Insert<Student>(student);

删除

关键就是构造删除条件,通过api查到Remove方法的签名:public virtual WriteConcernResult Remove(IMongoQuery query);在网上看到好多写法都是在Remove中传入BsonDocument对象,但是我查源码发现bsonDocument根本没有实现IMongoQuery接口,实现这个接口的是一个叫做QueryDocument的类,同时QueryDocument也继承了BsonDocument对象,而构造BsonDocument和QueryDocument的方式超级多,各种方便,简单写几种:

比如构造如下条件,delete from table where Age>15 &Age<20;

相应的mongodb条件写法:{Age:{$gt:15,$lt:20}},下面就来构造这个条件;

//方式1,直接通过bsonDocument构造:

BsonDocument doc = new BsonDocument
{
{ "Age",new BsonDocument{{"$gte",},{"$lte",}}}
};
//方式2,直接通过QueryDocument构造:与1类似 QueryDocument query = new QueryDocument
{
{ "Age",new QueryDocument{{"$gte",},{"$lte",}}}
};
//方式3,直接通过反序列化json字符串: string json = "{ Age:{$gte:10,$lte:15}}";
var queryJson = BsonSerializer.Deserialize(json, typeof(BsonDocument)) as BsonDocument;
//个人觉得这种方式挺好,如果你mongodb命令熟悉,这种方式挺适合构造复杂条件的 //方式4:通过Query类,Query是静态类,封装了各种逻辑条件方法,有泛型和泛型两种方式: var query1 = Query.GT("Age", );//大于10;greater than 10
var query2 = Query.LT("Age", );//小于15;less than 15
var query = Query.And(query1, query2);
//但是更好的要数泛型方式了: var query1 = Query<Student>.GTE<Int32>(t => t.Age, );
var query2 = Query<Student>.LTE<Int32>(t => t.Age, );
//var query = Query.And(Query.GTE("Age", 10), Query.LTE("Age", 15));
var query = Query.And(query1, query2);
//最后执行Remove方法即可;

C#的驱动程序都有一个连接池,有效地使用连接到服务器。所以无需调用Connect 或者Disconnect只要交给驱动处理即可(调用Connect 没什么影响,但是调用Disconnect 会关掉连接池所有连接)

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders; namespace ConsoleApplication1
{ public class Entity
{ public ObjectId Id { get; set; } public string Name { get; set; }
} class Program
{
static void Main(string[] args)
{ var connectionString = "mongodb://localhost"; var client = new MongoClient(connectionString); var server = client.GetServer(); var database = server.GetDatabase("test"); var collection = database.GetCollection<Entity>("entities"); var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; var query = Query<Entity>.EQ(e => e.Id, id);
entity = collection.FindOne(query); entity.Name = "Dick"; collection.Save(entity); var update = Update<Entity>.Set(e => e.Name, "Harry"); collection.Update(query, update); collection.Remove(query); }
}
}

五、MongoDB使用场景:

适合场景:

1、用于对象及JSON数据的存储

2、大尺寸、低价值的数据

3、缓存,比如考试的题库

4、日志数据

不使用的场景:

1、高度事物性的系统:银行系统

2、需要高度优化查询的数据

3、重要的数据

4、需要复杂SQL解决的问题

写个批处理,方便开启Mongodb服务器

@echo

@pause

mongod -repair -dbpath "E:\mongodbfiles"

mongod -dbpath "E:\mongodbfiles"

@pause

“mongod -repair -dbpath "E:\mongodbfiles"”是为了解决启动时有时会报错“Unclean shutdown detected mongodb”。

把它拷贝到记事本,保存为.bat文件,然后和mongod.exe放在同一个目录,双击它就OK了。

MongoDB安装、CURD增改查删操作、应用场景的更多相关文章

  1. php mysqli 链接数据库 CURD 增改查删

    <?php function println($msg) { echo "<br>"; echo $msg; } $mysql_server_name = &qu ...

  2. mysql 中的增改查删(CRUD)

    增改查删可以用CURD来表示  增加:create  修改:update   查找:read      删除:delete 增加create :  insert +表名+values+(信息): in ...

  3. mongodb的安装与增删改查

    mongodb是一款分布式的文件存储的数据库,注意这两个词,分布式和文件存储.mongodb支持复制和分片,可以合理的运用空间的大小,也可以达到容灾的目的.另外文件存储也是一个特点,抛弃了传统的表的概 ...

  4. MongoDB入门(介绍、安装、增删改查)

    文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...

  5. 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践

    若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...

  6. 使用DOM进行xml文档的crud(增删改查)操作<操作详解>

    很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...

  7. 利用koa实现mongodb数据库的增删改查

    概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...

  8. 【基础篇】js对本地文件增删改查--删

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  9. mysql增删改查相关操作

    mysql增删改查相关操作 以前用mysql用的少,对于数据库相关的操作不熟悉,现在开始要接触数据库了,记录一下相关的基础操作吧. 1.数据库的授权操作 # mysql -u root -p Ente ...

随机推荐

  1. Codeforces 189A. Cut Ribbon

    题目链接:http://codeforces.com/problemset/problem/189/A 题意: 给你一个长度为 N 的布条, 再给你三个长度 a, b , c.你可以用剪刀去剪这些布条 ...

  2. 【块状树】bzoj3720 Gty的妹子树

    块状树.教程见:http://z55250825.blog.163.com/blog/static/1502308092014163413858/将树按一定大小分块,分成许多子树,在每个子树的根节点记 ...

  3. 【贪心】bzoj3850 ZCC Loves Codefires

    类似某noip国王游戏. 考虑交换两个题目的顺序,仅会对这两个题目的贡献造成影响. 于是sort,比较时计算两个题目对答案的贡献,较小的放在前面. #include<cstdio> #in ...

  4. Java高级架构师(一)第05节:TortoiseGit的本地使用

  5. Saga的实现模式——控制者(Saga implementation patterns – Controller)

    https://lostechies.com/jimmybogard/2013/03/14/saga-implementation-patterns-controller/ 之前的文章中我们介绍了观察 ...

  6. Shiro+SpringMVC 实现更安全的登录(加密匹配&登录失败超次数锁定帐号)

    原文:http://blog.csdn.net/wlwlwlwl015/article/details/48518003 前言 初学shiro,shiro提供了一系列安全相关的解决方案,根据官方的介绍 ...

  7. jQuery用noConflict代替$

    js框架很多的情况下,很容易出现冲突,建议使用noConflict代替$ //消除$对jquery缩写 $.noConflict(); //使用了noConflict后,用$就会无效,应用jQuery ...

  8. MPFIT for python

    MPFIT本来用IDL语言写的,后面有人翻译成了C语言版本.再后面鉴于python语言的流行使用,又有人将其用Cython加了python接口,直接可以在python中调用,极大地方便了额们这些经常用 ...

  9. 关于Android的Build类——获取Android手机设备各种信息

    经常遇到要获取Android手机设备的相关信息,来进行业务的开发,比如经常会遇到要获取CPU的类型来进行so库的动态的下载.而这些都是在Android的Build类里面.相关信息如下: private ...

  10. PHP图片的类型将其自动编码成base64

    <!--根据图片的类型将其自动编码成base64--><html><head><?php$file="test.jpg";$type=ge ...