MongoDB comment vérifier l’existence

J’aimerais savoir comment vérifier l’existence d’un object avec mongoDB et C #.

J’ai trouvé un moyen de le faire mais j’ai dû utiliser Linq grâce à la méthode Any (), mais j’aimerais savoir s’il est possible de le faire sans Linq?

database.GetCollection("Applications").Find(Query.EQ("Name", applicationName)).Any() 

Merci les gars!

Utilisez l’opérateur $ count pour éviter les problèmes de mémoire, il ne charge pas les documents de la firebase database en mémoire:

 int count = items.FindAs(Query.EQ("name", appName)).Count(); if(count > 0) { //then doc exists } 

L’opérateur $ existe dans mongodb peut être utilisé pour identifier qu’un champ existe dans un document, mais vous ne pouvez pas lui transmettre de requête:

 database.GetCollection("Applications") .Find(Query.Exists("Name", true)); 

L’option la plus simple, type / refactor-safe, consiste à utiliser LINQ * avec AsQueryable :

 var collection = database.GetCollection("Applications"); var exists = collection.AsQueryable().Any(avm => avm.Name == applicationName); 

Cela créera une commande de compte et vérifiera qu’elle est supérieure à zéro.

Dans certains cas (où les performances sont un problème), au lieu de compter tous les documents correspondants, vous pouvez simplement demander à MongoDB d’obtenir le premier et de vérifier s’il en existe un:

 var collection = database.GetCollection("Applications"); var exists = collection.AsQueryable().FirstOrDefault(avm => avm.Name == applicationName) != null; 

Comme l’a souligné Robert Stam, MongoCollection.Exists et Query.Exists sont pas pertinents dans ce cas.


* À partir de la version 1.4 (2012-03-27), le pilote prend en charge les requêtes LINQ (traduites en requêtes mongo, il n’y a donc pas de problème de mémoire).

Pour vérifier l’existence dans la version 2.x du pilote, procédez comme suit:

 bool exists = collection.Find(_ => _.Name == applicationName).Any(); 

Ou de manière asynchrone:

 bool exists = await collection.Find(_ => _.Name == applicationName).AnyAsync();; 

MongoCollection.Exists vérifie si la collection elle-même existe et non si un document particulier existe.

Query.Exists (la version du générateur de requête de $ existe) est utilisé pour demander si un document contient un champ particulier (par nom).

Il n’y a pas de moyen “officiel” de rechercher si un document correspondant à une requête existe ou non, mais la suggestion d’Andrew Orsich d’utiliser le décompte est probablement la meilleure façon. J’appendai simplement qu’ils ajoutent que si vous souhaitez malgré tout traiter le ou les documents correspondants, vous pouvez également les interroger à l’aide d’une variante de la fonction Rechercher.

Je vais suggérer les méthodes décrites dans le tutoriel officiel

http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods

Vous pouvez trouver et ensuite compter pour obtenir l’existence.

EDIT: Pour résoudre un problème de mémoire, il semble qu’il “existe” dans la méthode Exists dans l’object MongoCollection;)