首页后端开发ASP.NETMongoDB在.Net中的使用方法详解

MongoDB在.Net中的使用方法详解

时间2024-01-30 14:09:03发布访客分类ASP.NET浏览203
导读:收集整理的这篇文章主要介绍了MongoDB在.Net中的使用方法详解,觉得挺不错的,现在分享给大家,也给大家做个参考。最近在研究mongodb,在网上搜索发现针对.net 中使用Mongodb的文章要么是早期的驱动版本,要么资料很少,所以写...
收集整理的这篇文章主要介绍了MongoDB在.Net中的使用方法详解,觉得挺不错的,现在分享给大家,也给大家做个参考。最近在研究mongodb,在网上搜索发现针对.net 中使用Mongodb的文章要么是早期的驱动版本,要么资料很少,所以写个随笔记录一下,本文详细的给大家介绍了在.Net中使用MongoDB的方法教程,需要的朋友可以参考借鉴,下面来一起看看吧。

什么是MongoDB

MongoDB是基于文档的存储的(而非表),是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。Mongo主要解决的是海量数据的访问效率问题。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GriDFS,可以支持海量的数据存储。由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能,因此非常受到欢迎。

BSON是MongoDB的数据存储格式。大家对于JSON比较熟悉,但是什么是BSON呢BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。

BSON具有如下特点

1.更快的遍历速度

  对JSON格式来说,太大的JSON结构会导致数据遍历非常慢。在JSON中,要跳过一个文档进行数据读取,需要对此文档进行扫描才行,需要进行麻烦数据结构匹配,比如括号的匹配,而BSON对JSON的一大改进就是,它会将JSON的每一个元素的长度存在元素的头部,这样你只需要读取到元素长度就能直接seek到指定的点上进行读取了。

2.操作更简易

  对JSON来说,数据存储是无类型的,比如你要修改基本一个值,从9到10,由于从一个字符变成了两个,所以可能其后面的所有内容都需要往后移一位才可以。而使用BSON,你可以指定这个列为数字列,那么无论数字从9长到10还是100,我们都只是在存储数字的那一位上进行修改,不会导致数据总长变大。当然,在MongoDB中,如果数字从整形增大到长整型,还是会导致数据总长变大的。

3.增加了额外的数据类型

  JSON是一个很方便的数据交换格式,但是其类型比较有限。BSON在其基础上增加了“byte array”数据类型。这使得二进制的存储不再需要先base64转换后再存成JSON。大大减少了计算开销和数据大小。当然,在有的时候,BSON相对JSON来说也并没有空间上的优势,因为有了类型概念。

MongoDB windows下 安装

MongoDB的安装很简单,设置好安装路径后,一直Next直到安装结束,最大的坑就是MongoDB服务的安装,下面具体说下MongoDB安装之后的一些配置操作

1.在根目录下创建数据库路径(data目录)、日志路径(LOGs目录)、日志文件(mongo.log文件)、配置路径(conf目录)我的安装路径是:D:\PRogram Files\mongodb

2.在conf目录下创建配置文件mongo.conf,文件内容如下:


logpath=D:\Program Files\mongodb\logs\mongodb.log #日志输出文件路径logapPEnd=true #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件journal=true #启用日志文件,默认启用quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为falseport=27017 #端口号 默认为27017auth=true #启用验证 需要用户名密码@H_304_51@

配置完成以上2个步骤 就可以 启动MongoDB了

运行CMD 输入命令 (注意 mongod的路径)


mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf"

3.创建并启动MongoDB服务

如果每次都按照步骤三那样操作,岂不是相当麻烦,按照如下命令来创建并启动MongoDB服务,就可以通过windows服务来管理MongoDB的启动和关闭了


mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf" --install --serviceName "mongoDB"net start MongoDB

测试是否成功 可以在 浏览器中输入http://localhost:27017/如果出现下图表示服务安装成功

如果需要卸载MongoDB服务 在CMD 中运行


mongod.exe --remove --serviceName "MongoDB"

前期准备工作完成了,就可以开始撸代码了

如何在.net 中使用MongoDB

首先在项目中引入 MongoDB.Bson.dll,MongoDB.Driver.dll,MongoDB.Driver.Core.dll 我使用的是2.0版本的 现在好多文章都是介绍使用1+版本的 这也是我写此文的目的引入驱动DLL后,就可以开始撸代码了

部分代码如下


private static MongoClient client;
    private static IMongoDatabase database;
    //本地配置private const string MongoDBConnectionStr = "mongodb://localhost";
    //数据库名称private static string DefaultDataBaseName = "test";
  public MongoDBHelper(){
     GetConnection(DefaultDataBaseName);
}
     /// summary>
    /// 构造函数 指定数据库/// /summary>
    /// param name="dataBaseName">
    /param>
public MongoDBHelper(string dataBaseName){
     GetConnection(dataBaseName);
}
 private static void GetConnection(string dataBaseName){
     client = new MongoClient(MongoDBConnectionStr);
     database = client.GetDatabase(dataBaseName);
}
     /// summary>
    /// 异步插入一条数据,手动输入collection name/// /summary>
    public Task InsertAsyncT>
(string collectionName, T obj){
 if (database == null) {
      throw new Exception("没有指定数据库");
 }
     VAR collection = database.GetCollectionT>
    (collectionName);
     return collection.InsertOneAsync(obj);
}
     /// summary>
    /// 异步插入一条数据,采用类型T的完全限定名作为collection name/// /summary>
    public Task InsertAsyncT>
(T obj){
     return InsertAsync(typeof(T).FullName, obj);
}
     /// summary>
    /// 异步插入多条数据,手动输入collection name/// /summary>
    public Task BatchInsertAsyncT>
    (string collectionName, IEnumerableT>
 objs){
 if (database == null) {
      throw new Exception("没有指定数据库");
 }
 if (objs == null) {
      throw new argumentException();
 }
     var collection = database.GetCollectionT>
    (collectionName);
     return collection.InsertManyAsync(objs);
}
     /// summary>
    /// 异步插入多条数据,采用类型T的完全限定名作为collection name/// /summary>
    public Task BatchInsertAsyncT>
    (IEnumerableT>
 objs){
     return BatchInsertAsync(typeof(T).FullName, objs);
}
     /// summary>
    /// 插入一条数据/// /summary>
    public void InsertT>
(T obj){
     InsertAsync(obj).Wait();
}
     /// summary>
    /// 插入多条数据/// /summary>
    public void InsertT>
    (IEnumerableT>
 objs){
     BatchInsertAsync(objs).WaIT();
}
     /// summary>
    /// MongoDB C# Driver的Find方法,返回IFindFluent。手动输入collection name/// /summary>
    public IFindFluentT, T>
     FindT>
    (string collectionName, FilterDefinitionT>
 filter, FindOptions options = null){
 if (database == null) {
      throw new Exception("没有指定数据库");
 }
     var collection = database.GetCollectionT>
    (collectionName);
     return collection.Find(filter, options);
}
     /// summary>
    /// MongoDB C# Driver的Find方法,返回IFindFluent。采用类型T的完全限定名作为collection name/// /summary>
    public IFindFluentT, T>
     FindT>
    (FilterDefinitionT>
 filter, FindOptions options = null){
     return Find(typeof(T).FullName, filter, options);
}
     /// summary>
    /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc/// /summary>
    public ListT>
     GetT>
    (ExPressionFuncT, bool>
    >
 condition, int skip, int limit, string sort){
     return Get(new ListExpressionFuncT, bool>
    >
    >
 {
 condition }
    , skip, limit, sort);
}
     public ListT>
     GetT>
    (ExpressionFuncT, bool>
    >
 condition){
     return Get(condition, 0, 0, null);
}
     /// summary>
    /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc/// /summary>
    public ListT>
     GetT>
    (ListExpressionFuncT, bool>
    >
    >
 conditions, int skip, int limit, string sort){
 if (conditions == null || conditions.Count == 0) {
      conditions = new ListExpressionFuncT, bool>
    >
    >
 {
     x =>
 true }
    ;
 }
     var builder = BuildersT>
    .Filter;
     var filter = builder.And(conditions.Select(x =>
     builder.Where(x)));
      var ret = new ListT>
    ();
 try {
      ListSortDefinitionT>
    >
     sortDefList = new ListSortDefinitionT>
    >
    ();
  if (sort != null)  {
       var sortList = sort.Split(',');
       for (var i = 0;
     i  sortList.Length;
 i++)   {
        var sl = Regex.Replace(sortList[i].Trim(), @"\s+", " ").Split(' ');
        if (sl.Length == 1 || (sl.Length >
    = 2 &
    &
 sl[1].ToLower() == "asc"))    {
         sortDefList.Add(BuildersT>
    .Sort.Ascending(sl[0]));
    }
        else if (sl.Length >
    = 2 &
    &
 sl[1].ToLower() == "desc")    {
         sortDefList.Add(BuildersT>
    .Sort.Descending(sl[0]));
    }
   }
  }
      var sortDef = BuildersT>
    .Sort.COMbine(sortDefList);
      ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result;
 }
 catch (Exception e) {
  //异常处理 }
     return ret;
}
     public ListT>
     GetT>
    (ListExpressionFuncT, bool>
    >
    >
 conditions){
     return Get(conditions, 0, 0, null);
}
    

以上就是MongoDB在.Net中的使用方法详解的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

MongoDB使用方法

若转载请注明出处: MongoDB在.Net中的使用方法详解
本文地址: https://pptw.com/jishu/592621.html
搭建Visual Stduio 2010开发环境的图文详解 浅谈如何手动配置 node

游客 回复需填写必要信息