Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon d'utiliser MongoDB dans .Net

Explication détaillée de la façon d'utiliser MongoDB dans .Net

巴扎黑
巴扎黑original
2017-08-14 11:45:162131parcourir

J'ai fait des recherches sur mongodb récemment. J'ai effectué une recherche en ligne et j'ai découvert que les articles sur l'utilisation de mongodb dans .net sont soit des versions antérieures du pilote, soit contiennent très peu d'informations, j'ai donc écrit un essai pour les enregistrer en détail. comment utiliser mongodb dans .Net. Les amis qui ont besoin d'un didacticiel sur l'utilisation de MongoDB peuvent s'y référer ci-dessous.

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 de requête qu'il prend en charge est très puissant. Sa syntaxe est quelque peu similaire à un langage de requête orienté objet. Il peut presque implémenter la plupart des fonctions similaires aux requêtes à table unique dans les bases de données relationnelles, et il prend également en charge l'indexation. de 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.

Installation de MongoDB sous Windows

L'installation de MongoDB est très simple Après avoir défini le chemin d'installation, restez Suivant jusqu'à ce que l'installation soit terminée. .Le plus gros piège est Pour l'installation du service MongoDB, parlons en détail de certaines opérations de configuration après l'installation de MongoDB

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

2 Créez le fichier de configuration mongo.conf dans le répertoire conf. est la suivante :


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écutez la commande d'entrée CMD (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-ce pas assez gênant si vous suivez la troisième étape à chaque fois ? commande suivante pour créer et démarrer le service MongoDB, et vous pouvez gérer MongoDB via le service Windows Démarré et fermé


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

net start MongoDB

Pour tester si cela réussit, vous pouvez. entrez http://localhost:27017/ dans le navigateur. Si l'image suivante apparaît, l'installation du service est réussie

Si vous devez désinstaller le service MongoDB et l'exécuter. dans CMD


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

Une fois les préparatifs préliminaires terminés, vous pouvez commencer le code

Comment utiliser MongoDB dans . net

Introduisez d'abord MongoDB.Bson.dll et MongoDB.Driver.dll dans le projet, MongoDB.Driver.Core.dll J'utilise la version 2.0. Maintenant, de nombreux articles présentent l'utilisation de. version 1+. C'est aussi le but de la rédaction de cet article. Après avoir présenté la DLL du pilote, vous pouvez commencer à coder

Une partie du code est la suivante


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);

}

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