最近mongodbについて調べていて、インターネットでを検索したところ、.netでのmongodbの使用に関する記事は初期のドライバーバージョンであるか、または非常に情報が少ないことがわかったので、それを記録するためにエッセイを書きましたこの記事では、それを詳しく紹介します。.Net で MongoDB を使用する方法についてのチュートリアルが必要な友達は、それを参照してください。
MongoDB とは
MongoDB は (テーブルではなく) ドキュメント ストレージに基づいており、非リレーショナル データベースの中で最も機能が豊富で、最もリレーショナルなデータベースです。 .データベース。サポートするデータ構造は非常に緩やかで、json に似た bson 形式であるため、より複雑な データ型 を格納できます。 Mongo の最大の特徴は、サポートする クエリ 言語が非常に強力であることです。その構文は オブジェクト指向クエリ言語に似ており、リレーショナル データベースの単一テーブル クエリとほぼ同じ機能を実現できます。データ作成インデックスにも対応しています。 Mongo は主に大量のデータへのアクセス効率の問題を解決します。 Mongo は主に大規模なデータ ストレージをサポートするため、Mongo には大規模なデータ ストレージをサポートできる優れた分散 ファイル システム GridFS も付属しています。 Mongo は、複雑なデータ構造をサポートでき、強力なデータ クエリ機能を備えているため、非常に人気があります。 BSON は MongoDB のデータストレージ形式です。 JSON は誰もがよく知っていますが、BSON は JSON 形式に基づいています。変換に JSON を選択する主な理由は、JSON の汎用性とスキーマレスの特性です。
BSON には次の特徴があります
1. 走査速度の高速化JSON 形式の場合、JSON 構造が大きすぎるとデータの走査が非常に遅くなります。 JSON では、データ読み取りのためにドキュメントをスキップしたい場合、ドキュメントをスキャンする必要があり、ブラケット マッチングなどの面倒なデータ構造マッチングを実行する必要があります。BSON から JSON への主な改善点は、各要素は要素のヘッダーに格納されるため、要素の長さを読み取るだけで、指定された読み取りポイントに直接シークできます。
2. より簡単な操作たとえば、基本的な値を 9 から 10 に変更する場合は、その後に All を続けることができます。コンテンツを 1 つ前の位置に戻す必要があります。 BSON を使用すると、この列を数値列として指定できます。これにより、数値が 9 から 10 または 100 に増加しても、数値が格納されているビットのみが変更されるため、データの合計長は変更されません。大きくなる。もちろん、MongoDB では、整数から長整数に数値が増加しても、合計のデータ長は増加します。
3. データ型を追加しましたJSON は非常に便利なデータ交換形式ですが、その種類は比較的限られています。 BSONは、それに基づいて「バイト
配列」データ型を追加します。これにより、バイナリ データを JSON に保存する前に Base64 に変換する必要がなくなります。計算オーバーヘッドとデータ サイズが大幅に削減されます。もちろん、型の概念により、BSON には JSON よりもスペースの利点がない場合があります。 Windows での
MongoDBインストール MongoDB のインストールは非常に簡単です。インストールが完了するまで Next
を続けてください。 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 #启用验证 需要用户名密码
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 InsertAsync<T>(string collectionName, T obj) { if (database == null) { throw new Exception("没有指定数据库"); } var collection = database.GetCollection<T>(collectionName); return collection.InsertOneAsync(obj); } /// <summary> /// 异步插入一条数据,采用类型T的完全限定名作为collection name /// </summary> public Task InsertAsync<T>(T obj) { return InsertAsync(typeof(T).FullName, obj); } /// <summary> /// 异步插入多条数据,手动输入collection name /// </summary> public Task BatchInsertAsync<T>(string collectionName, IEnumerable<T> objs) { if (database == null) { throw new Exception("没有指定数据库"); } if (objs == null) { throw new ArgumentException(); } var collection = database.GetCollection<T>(collectionName); return collection.InsertManyAsync(objs); } /// <summary> /// 异步插入多条数据,采用类型T的完全限定名作为collection name /// </summary> public Task BatchInsertAsync<T>(IEnumerable<T> objs) { return BatchInsertAsync(typeof(T).FullName, objs); } /// <summary> /// 插入一条数据 /// </summary> public void Insert<T>(T obj) { InsertAsync(obj).Wait(); } /// <summary> /// 插入多条数据 /// </summary> public void Insert<T>(IEnumerable<T> objs) { BatchInsertAsync(objs).Wait(); } /// <summary> /// MongoDB C# Driver的Find方法,返回IFindFluent。手动输入collection name /// </summary> public IFindFluent<T, T> Find<T>(string collectionName, FilterDefinition<T> filter, FindOptions options = null) { if (database == null) { throw new Exception("没有指定数据库"); } var collection = database.GetCollection<T>(collectionName); return collection.Find(filter, options); } /// <summary> /// MongoDB C# Driver的Find方法,返回IFindFluent。采用类型T的完全限定名作为collection name /// </summary> public IFindFluent<T, T> Find<T>(FilterDefinition<T> filter, FindOptions options = null) { return Find(typeof(T).FullName, filter, options); } /// <summary> /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc /// </summary> public List<T> Get<T>(Expression<Func<T, bool>> condition, int skip, int limit, string sort) { return Get(new List<Expression<Func<T, bool>>> { condition }, skip, limit, sort); } public List<T> Get<T>(Expression<Func<T, bool>> condition) { return Get(condition, 0, 0, null); } /// <summary> /// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc /// </summary> public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions, int skip, int limit, string sort) { if (conditions == null || conditions.Count == 0) { conditions = new List<Expression<Func<T, bool>>> { x => true }; } var builder = Builders<T>.Filter; var filter = builder.And(conditions.Select(x => builder.Where(x))); var ret = new List<T>(); try { List<SortDefinition<T>> sortDefList = new List<SortDefinition<T>>(); 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<T>.Sort.Ascending(sl[0])); } else if (sl.Length >= 2 && sl[1].ToLower() == "desc") { sortDefList.Add(Builders<T>.Sort.Descending(sl[0])); } } } var sortDef = Builders<T>.Sort.Combine(sortDefList); ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result; } catch (Exception e) { //异常处理 } return ret; } public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions) { return Get(conditions, 0, 0, null); }
示例代码中只实现了插入和查询功能,后续会将完整代码上传
总结
本文只记录了MongoDB的最基本使用,后续会介绍副本级,主从自动备份等机制与实现方式,感兴趣的朋友们请继续关注脚本之家,谢谢大家对脚本之家的支持。
以上が.Net で MongoDB を使用する方法のチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。