首页 技术 正文
技术 2022年11月8日
0 收藏 573 点赞 1,889 浏览 4574 个字

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

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

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

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

一、MongoDB安装

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

MongoDB安装、CURD增改查删操作、应用场景

下载完成后点击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安装、CURD增改查删操作、应用场景

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

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

MongoDB安装、CURD增改查删操作、应用场景

正确添加后,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

MongoDB安装、CURD增改查删操作、应用场景

解决方法 :

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″})

MongoDB安装、CURD增改查删操作、应用场景

2、查询– “_id”: 数据库加的GUID主键

db.person.find()

MongoDB安装、CURD增改查删操作、应用场景

3、修改

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

MongoDB安装、CURD增改查删操作、应用场景

4、删除

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

db.person.remove({“name”:”joye888″})–根据条件删除

MongoDB安装、CURD增改查删操作、应用场景

(二)非命令操作

构造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@pausemongod -repair -dbpath "E:\mongodbfiles"mongod -dbpath "E:\mongodbfiles"@pause

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,401
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,896