Comment interroger si le tableau est null ou vide à l'aide de MongoDB et C# Pilote?
De fond:
Ce dont j'ai besoin pour accomplir est de supprimer tous les enregistrements dans une collection si une matrice spécifique sur l'enregistrement est null ou vide.
Je comprends que le C# Pilote de requêtes pour trouver une valeur nulle de la matrice est:
IMongoQuery query = Query.Exists("myArray", false);
C'est très bien pour la détection d'une valeur null tableau, mais parfois, le tableau ne sera pas nulle, mais n'auront pas tous les éléments. Ce dont j'ai besoin est plus du genre:
//Note: second subquery will not work
IMongoQuery query = Query.Or(
Query.Exists("myArray", false),
Query.IsEmpty("myArray", false) //error
);
Modèle:
Ma classe devrait ressembler à:
public class MyClass
{
//This property may be null or empty
[BsonElement("myArray")]
public string[] MyArray { get; set; }
[BsonElement("someElement")]
public int SomeElement{ get; set; }
}
Résumé:
- Ce que le C# Pilote méthode dois-je utiliser pour interroger si un tableau est vide?
- Ou, ce qui est la meilleure façon de vérifier si un tableau est null ou vide?
L'aide de ce serait grandement apprécié! 🙂
OriginalL'auteur Steve Konves | 2012-06-13
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche pour le $taille de l'utilisateur.
Query.Size("myArray", 0)
sera vrai si le tableau est vide.http://www.mongodb.org/display/DOCS/Advanced+Requêtes#AdvancedQueries-%24size
OriginalL'auteur Craig Wilson
$exists correspond uniquement les champs qui ne sont pas présents. Si un champ est présent, mais sa valeur est null (BFILS null), ces champs ne sont pas appariés par $existe. http://docs.mongodb.org/manual/reference/operator/query/exists/
Cependant, la vérification de la les champs de la valeur contre valeur null correspond dans les deux cas: le champ n'existe pas, et aussi la valeur du champ est null. http://docs.mongodb.org/manual/faq/developers/#faq-developers-query-for-nulls
Donc, dans ce cas. Il devrait être OU de l'état sur deux critères: 1. domaine: null 2. la taille du champ =0;
{ "$" : [ { "Montableau" : { "$taille" : 0}} , { "Montableau" : null }]}
error: { "$err" : "invalid operator: $or", "code" : 10068 }
.Je viens d'effectuer les opérations suivantes à partir de la console et Il a fonctionné sans erreur. >db.tableau.insert({Montableau:[12, 23]}) > db.tableau.find() { "_id" : ObjectId("53ec3aac1f4db058b95d435e"), "Montableau" : [ 12, 23 ] } > db.tableau.find({$ou:[{Montableau:{$size:0}}, {Montableau:null}]}) >
OriginalL'auteur Poorna
Pour trouver vide champs du tableau dans la collection MongoDb utiliser la requête suivante dans le shell Mongo
db.COLLECTION.find({ myArray: [] }).pretty();
Changement de COLLECTION avec votre base de données nom de la collection.
OriginalL'auteur viren Kalkhudiya
Noter que
$size
ne pouvez pas utiliser les index et$or
a quelques index des limitations liées à l' trop. J'ai trouvé ce qui suit est un bon moyen de retrouver des documents vides ou d'autres tableaux, tout en évitant les restrictions de $et $taille. Et il est trop court! 🙂{myArray: {$in: [null, []]}}
OriginalL'auteur Mikael Lirbank