十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章将为大家详细讲解有关怎么在.Net中使用MongoDB,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟主机、营销软件、网站建设、抚州网站维护、网站推广。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 #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false port=27017 #端口号 默认为27017 auth=true #启用验证 需要用户名密码
配置完成以上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); } ////// 构造函数 指定数据库 /// /// public MongoDBHelper(string dataBaseName) { GetConnection(dataBaseName); } private static void GetConnection(string dataBaseName) { client = new MongoClient(MongoDBConnectionStr); database = client.GetDatabase(dataBaseName); } ////// 异步插入一条数据,手动输入collection name /// public Task InsertAsync(string collectionName, T obj) { if (database == null) { throw new Exception("没有指定数据库"); } var collection = database.GetCollection (collectionName); return collection.InsertOneAsync(obj); } /// /// 异步插入一条数据,采用类型T的完全限定名作为collection name /// public Task InsertAsync(T obj) { return InsertAsync(typeof(T).FullName, obj); } /// /// 异步插入多条数据,手动输入collection name /// public Task BatchInsertAsync(string collectionName, IEnumerable objs) { if (database == null) { throw new Exception("没有指定数据库"); } if (objs == null) { throw new ArgumentException(); } var collection = database.GetCollection (collectionName); return collection.InsertManyAsync(objs); } /// /// 异步插入多条数据,采用类型T的完全限定名作为collection name /// public Task BatchInsertAsync(IEnumerable objs) { return BatchInsertAsync(typeof(T).FullName, objs); } /// /// 插入一条数据 /// public void Insert(T obj) { InsertAsync(obj).Wait(); } /// /// 插入多条数据 /// public void Insert(IEnumerable objs) { BatchInsertAsync(objs).Wait(); } /// /// MongoDB C# Driver的Find方法,返回IFindFluent。手动输入collection name /// public IFindFluentFind (string collectionName, FilterDefinition filter, FindOptions options = null) { if (database == null) { throw new Exception("没有指定数据库"); } var collection = database.GetCollection (collectionName); return collection.Find(filter, options); } /// /// MongoDB C# Driver的Find方法,返回IFindFluent。采用类型T的完全限定名作为collection name /// public IFindFluentFind (FilterDefinition filter, FindOptions options = null) { return Find(typeof(T).FullName, filter, options); } /// /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc /// public ListGet (Expression > condition, int skip, int limit, string sort) { return Get(new List >> { condition }, skip, limit, sort); } public List Get (Expression > condition) { return Get(condition, 0, 0, null); } /// /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc /// public ListGet (List >> conditions, int skip, int limit, string sort) { if (conditions == null || conditions.Count == 0) { conditions = new List >> { x => true }; } var builder = Builders .Filter; var filter = builder.And(conditions.Select(x => builder.Where(x))); var ret = new List (); try { List > sortDefList = new List >(); 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(Builders .Sort.Ascending(sl[0])); } else if (sl.Length >= 2 && sl[1].ToLower() == "desc") { sortDefList.Add(Builders .Sort.Descending(sl[0])); } } } var sortDef = Builders .Sort.Combine(sortDefList); ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result; } catch (Exception e) { //异常处理 } return ret; } public List Get (List >> conditions) { return Get(conditions, 0, 0, null); }
关于怎么在.Net中使用MongoDB就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。