最近一个项目,数据库既然用的mongodb。之前没接触啊,怎么办,那就重新学呗。挺好玩的
稍微介绍一,呵呵。Mongodb是一个基于分布式文件存储的数据库。有C++语言编写。旨在web应用提供可 扩展的高性能的数据存储解决方案。
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
不扯淡了,直接进入主题。
介绍一下mongodb 数据的 安装过程
1.
把mongodb安装成window服务
每次运行mongod –dbpath D:/MongoDB/data命令行来启动MongoDB实在是不方便,把它作为Windows服务,这样就方便多了。命令如下:
D:\MongoDB\bin>mongod --logpath D:\MongoDB\logs\MongoDB.log --logappend --dbpath D:\MongoDB\data --directoryperdb --serviceName MongoDB --install
注意:
1:log一定要指定一个xxx.log文件(文件不存在也要这么写,会自动创建,写成这样是不可以的–logpath d:\mongodb\logs);
2:logs文件夹和data文件夹要先新建好;serviceName的N字母要大写。
该命令行指定了日志文件:D:\MongoDB\logs\MongoDB.log,日志是以追加的方式输出的;
数据文件目录:D:\MongoDB\data,并且参数–directoryperdb说明每个DB都会新建一个目录;
Windows服务的名称:MongoDB;
以上的三个参数都是可以根据自己的情况而定的。
最后是安装参数:–install,与之相对的是–remove
启动MongoDB:net start MongoDB
停止MongoDB:net stop MongoDB
(一)数据可的链接。
在web.config链接
<connectionStrings> <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-iDream.Web-20131021202431;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-iDream.Web-20131021202431.mdf" /> </connectionStrings>
(二)在C#中使用官方的驱动来操作mongodb数据库
(1)在nuget 中找到official mongodb C# driver 并下载,安装
完成之后再引用中会看到 mongodb.Driver.dll(驱动程序)和mongodb.Bson(序列化,Json相关)的两dll
驱动安装完成,接下来进行数据库的链接
(2)链接数据库,代码如下
MongoServer _server; MongoDatabase _database; MongoCollection<BaseDetails> _contacts; public BaseDetailsRepository() : this("") { } public BaseDetailsRepository(string connection) { if (string.IsNullOrWhiteSpace(connection)) { connection = "mongodb://localhost:27017"; } _server = MongoServer.Create(connection); _database = _server.GetDatabase("iD_BaseDetails", SafeMode.True);//数据库的名称 _contacts = _database.GetCollection<BaseDetails>("iD_BaseDetails");//要链接的集合 }
顺便把模型一起贴出来吧
using MongoDB.Bson.Serialization.Attributes; [BsonId] public string DId { set; get; } public string BId { set; get; } public string Que01 { set; get; } public string Que02 { set; get; } public string Que03 { set; get; }
这样的话链接数据库也就完成了,接下来进行增删改了
(三)添加数据
public BaseDetails AddBaseDetail(BaseDetails item) { item.DId = ObjectId.GenerateNewId().ToString(); //item.PubDt = DateTime.UtcNow; _contacts.Insert(item); return item; }
调用AddBaseDetail方法
[HttpPost] public ActionResult Detail(BaseDetails item, string Id) { BaseDetailsRepository bd = new BaseDetailsRepository(); bd.AddBaseDetail(item); return RedirectToAction("Success"); }
(四)修改数据
先把要修改的那条记录的ID找出了,在根据iD找出这条记录,再去修改这条记录里的某一个字段
(1)根据iD找出这个记录
public BaseReg GetData(string id) { IMongoQuery imq = Query.EQ("_id", id); return _contacts.Find(imq).FirstOrDefault(); }
修改这条记录
[HttpPost] public ActionResult TJBeiZhu(string Id,BaseReg brg) { try { BaseReg br = new BaseReg(); BaseRepostory brt=new BaseRepostory();初始化 BaseReg model = brt.GetData(Id);//找出这条数据 br.Id = model.Id; br.BId = model.BId; br.RName = model.RName; br.Nickname = model.Nickname; br.Local = model.Local; br.Phone = model.Local; br.Weixin = model.Weixin; br.WeiBo = model.WeiBo; br.Qq = model.Qq; br.Email = model.Email; br.Project = model.Project; br.PubDt = model.PubDt; br.Beizhu =brg.Beizhu; brt.AddBeiZhu(br);//修改 return RedirectToAction("index", "Admin"); } catch (Exception ex) { throw ex; } }
更新这条记录
public BaseReg AddBeiZhu(BaseReg model) { //定义“Id”的值为model.Id的查询条件 // var query = new QueryDocument { { "Id", model.Id } }; IMongoQuery query = Query.EQ("_id", model.Id); //定义更新文档 var update = new UpdateDocument { { "$set", new QueryDocument { { "Beizhu", model.Beizhu } } } }; //执行更新操作 _contacts.Update(query, update); return model; }
(五)删除
(1) 找出这条数据的ID,在进行删除
public BaseReg GetData(string id) { IMongoQuery imq = Query.EQ("_id", id); return _contacts.Find(imq).FirstOrDefault(); }
(2)删除
[HttpPost] public ActionResult DelBase(string Id) { try { BaseRepostory brt = new BaseRepostory(); BaseReg model = brt.GetData(Id); brt.DelData(model); return RedirectToAction("index", "Admin"); } catch (Exception ex) { throw ex; } }
public BaseReg DelData(BaseReg model) { IMongoQuery imq = Query.EQ("_id", model.Id); _contacts.Remove(imq); return model; }
OK了。