2013-04-17 15 views
6

Sto cercando di ottenere il numero di documenti che hanno un campo con una stringa vuota. Questo campo, chiamiamolo "Field_One" è presente in tutti i documenti (quindi, per essere chiari, non sto cercando di scoprire se il campo esiste o no, voglio trovare quali documenti non hanno nulla (stringa vuota) nel campo "Field_One "Come verificare che un campo stringa in un documento MongoDB non sia vuoto?

ho provato ad utilizzare (utilizzando il driver C#):.

collection.Find(Query.NE("Field_One", BsonNull.Value)).Count() 
collection.Find(Query.NE("Field_One", BsonString.Null)).Count() 

e anche (qualcuno ha suggerito questo da qualche parte):

collection.Find(Query.GT("Field_One", BsonString.Empty)).Count() 

Ma non funziona (tornano tutte le documenti)

Inoltre, come domanda correlata: è questo il modo migliore per ottenere il numero di documenti corrispondenti in una raccolta? Per quanto ho capito, in realtà non recupererà i documenti dal database al mio programma, quindi il calcolo del conteggio viene eseguito nel server MongoDB.

+0

conteggio si è fatto sul server. proprio come un controllo di integrità, quando dici una stringa vuota, appare come valore "" quando recuperi il documento ed esamini quel campo? –

+0

Ciao Asya, grazie per la tua risposta. Ho recuperato il JSON e viene mostrato come "" per quei documenti che non hanno dati in quel campo. Quindi il campo è lì, di tipo String e ha "" per alcuni documenti e ha informazioni per gli altri. –

+0

nella shell di mongo, puoi provare: db.collection.find ({field: {$ type: 10}}). Controlla questa documentazione: http://docs.mongodb.org/manual/reference/operator/type/ – genericuser

risposta

6

Per testare una stringa non è vuota, in Javascript è semplicemente:

collection.find({Field_One:{ $ne: "" }}) 

vedi $ne. Non posso aiutarti a tradurre ciò nella lingua del driver C#.

10

BsonNull.Value traduce in nulla
BsonString.Empty si traduce in ""
BsonObject.Create("") si traduce in "", così

collection.Find(Query.NE("Field_One", BsonString.Empty)).Count() 

traduce in "Field_One": { "$ne": "" } quello che dovrebbe essere esattamente quello che stai cercando, se il campo è in realtà piena di ""

0

Supponendo che si stia eseguendo una query per i documenti di una classe che assomigliano a qualcosa:

public class MyClass { 
     public string Field_One { get; set; } 
     //... other attributes, constructors, methods etc... 
} 

È possibile anche scrivere la vostra query utilizzando lambda espressione in questo modo, per esempio:

var res = collection.Find(Query<MyClass>.NE(m => m.Field_One, BsonString.Empty)).Count(); 
Problemi correlati