Maison  >  Article  >  développement back-end  >  Tutoriel sur la façon d'utiliser MongoDB dans .Net

Tutoriel sur la façon d'utiliser MongoDB dans .Net

黄舟
黄舟original
2017-05-28 10:18:372011parcourir

J'ai fait des recherches mongodb récemment, et j'ai recherché en ligne et j'ai découvert que les articles sur l'utilisation de mongodb dans .net sont soit des premières versions de pilotes , soit il y a très peu d'informations. J'ai donc écrit un essai pour l'enregistrer. Cet article vous présente en détail le tutoriel sur la façon d'utiliser MongoDB dans .Net. Les amis qui en ont besoin peuvent s'y référer.

Qu'est-ce que MongoDB

MongoDB est basé sur le stockage de documents (pas de tables) et est un croisement entre une base de données relationnelle et une base de données non relationnelle base de données Les produits parmi eux sont les plus riches en fonctionnalités parmi les bases de données non relationnelles et les plus similaires aux bases de données relationnelles. La structure de données qu'il prend en charge est très lâche et est un format bson similaire à json, il peut donc stocker des types de données plus complexes. La plus grande caractéristique de Mongo est que le langage Requête qu'il prend en charge est très puissant. Sa syntaxe est quelque peu similaire au langage de requête Orienté objet, qui peut presque réaliser la plupart des fonctions similaires aux simples. -requêtes de table dans les bases de données relationnelles, et prend également en charge l'établissement d'un index sur les données. Mongo résout principalement le problème de l’efficacité de l’accès aux données massives. Étant donné que Mongo prend principalement en charge le stockage massif de données, Mongo est également livré avec un excellent système de fichiers distribué GridFS, qui peut prendre en charge un stockage massif de données. Mongo est très populaire car il peut prendre en charge des structures de données complexes et dispose de puissantes fonctions de requête de données.

BSON est le format de stockage de données de MongoDB. Tout le monde connaît JSON, mais qu'est-ce que BSON ? BSON est basé sur le format JSON. La principale raison du choix de JSON pour la transformation est la polyvalence de JSON et les caractéristiques sans schéma de JSON.

BSON a les caractéristiques suivantes

1 Vitesse de parcours plus rapide

Pour le format JSON en général. En parlant, une structure JSON trop volumineuse entraînera un parcours très lent des données. Dans JSON, si vous souhaitez ignorer un document pour la lecture des données, vous devez numériser le document et effectuer une correspondance de structure de données gênante, telle que la correspondance entre crochets. Une amélioration majeure de BSON vers JSON est qu'il stockera la longueur de chaque élément. dans l'en-tête de l'élément, de sorte qu'il vous suffit de lire la longueur de l'élément pour rechercher directement le point de lecture spécifié.

2. Opération plus simple

Pour JSON, le stockage des données n'est pas typé. Par exemple, vous souhaitez modifier une valeur de base de 9 à 10, car de Un caractère devient. deux, donc tout le contenu qui le suit devra peut-être être reculé d'une position. En utilisant BSON, vous pouvez spécifier cette colonne comme colonne numérique. Ensuite, peu importe que le nombre passe de 9 à 10 ou 100, nous modifierons uniquement le bit où le nombre est stocké, ce qui n'entraînera pas une augmentation de la longueur totale des données. devenir plus grand. Bien sûr, dans MongoDB, si le nombre passe d'un entier à un entier long, la longueur totale des données augmentera encore.

3. Ajout de types de données supplémentaires

JSON est un format d'échange de données très pratique, mais ses types sont relativement limités. BSON ajoute le type de données "byte array" sur cette base. Cela élimine le besoin de convertir les données binaires en base64 avant de les enregistrer au format JSON. La charge de calcul et la taille des données sont considérablement réduites. Bien sûr, parfois, BSON n'a pas d'avantage en termes d'espace par rapport à JSON en raison du concept de type.

MongoDB sous WindowsInstallation

L'installation de MongoDB est très simple Après avoir défini le chemin d'installation, il a. été SuivantJusqu'à la fin de l'installation, le plus gros écueil est l'installation du service MongoDB Voici quelques opérations de configuration après l'installation de MongoDB

Créer une base de données . chemin dans le répertoire racine (répertoire de données), chemin du journal (répertoire des journaux), fichier journal (fichier mongo.log), chemin de configuration (répertoire conf) Mon chemin d'installation est : D:Program Fichiersmongodb

2 .Créez le

fichier de configuration mongo.conf dans le répertoire conf Le contenu du fichier est le suivant :

logpath=D:\Program Files\mongodb\logs\mongodb.log #日志输出文件路径

logappend=true #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件

journal=true #启用日志文件,默认启用

quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

port=27017 #端口号 默认为27017

auth=true #启用验证 需要用户名密码
Après avoir terminé les deux étapes ci-dessus. , vous pouvez démarrer MongoDB.

Exécuter CMD Entrez la commande (notez le chemin de mongod)

mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf"
3. Créez et démarrez le service MongoDB

Ne serait pas. est-ce assez gênant si vous suivez l'étape trois à chaque fois ? Suivez la commande suivante pour le créer Et démarrez le service MongoDB, vous pouvez gérer le démarrage et l'arrêt de MongoDB via le service Windows

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(&#39;,&#39;);

   for (var i = 0; i < sortList.Length; i++)

   {

    var sl = Regex.Replace(sortList[i].Trim(), @"\s+", " ").Split(&#39; &#39;);

    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的最基本使用,后续会介绍副本级,主从自动备份等机制与实现方式,感兴趣的朋友们请继续关注脚本之家,谢谢大家对脚本之家的支持。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn