Wie um zu testen, ob ein string-Feld in einer MongoDB-Dokument ist nicht leer?
Ich versuche, um die Anzahl der Dokumente, die ein Feld mit einer leeren Zeichenfolge. Dieses Feld, nennen wir es "Field_One" ist in allen Dokumenten (also, klar zu sein, ich bin nicht versucht, Sie zu finden, wenn das Feld vorhanden ist oder nicht, will ich herausfinden, welche Dokumente haben nichts (leere Zeichenfolge) im Feld "Field_One".
Ich habe versucht, mithilfe (mit Hilfe der C# - Treiber):
collection.Find(Query.NE("Field_One", BsonNull.Value)).Count()
collection.Find(Query.NE("Field_One", BsonString.Null)).Count()
und auch (jemand schlug vor, dass diese irgendwo):
collection.Find(Query.GT("Field_One", BsonString.Empty)).Count()
Aber es funktioniert nicht (Sie kehren alle Dokumente).
Auch, als eine Verwandte Frage: Ist dies der beste Weg, um die Anzahl der passenden Dokumente in einer Sammlung? Soweit verstehe ich das, es wird nicht wirklich das abrufen der Dokumente aus der Datenbank in meinem Programm, so dass die Anzahl Berechnung erfolgt in der MongoDB-server.
- ja, zählen ist getan auf dem server. nur als sanity-check, wenn Sie sagen, leerer string, zeigt es sich als "" - Wert, wenn Sie Holen Sie das Dokument, und überprüfen Sie das Feld?
- Hallo Asya, danke für deine Antwort. Ich holte den JSON-und es zeigt, wie "" für diejenigen Dokumente, die keine Daten in diesem Feld. Also das Feld ist da, vom Typ String und hat "" für einige Dokumente und Informationen für andere.
- in der mongo-shell, die Sie ausprobieren können: db.Sammlung.find({Bereich: { $type:10 }}). Überprüfen Sie in dieser Dokumentation: docs.mongodb.org/manual/reference/operator/type
Du musst angemeldet sein, um einen Kommentar abzugeben.
BsonNull.Value
übersetzt in nullBsonString.Empty
übersetzt in ""BsonObject.Create("")
übersetzt in "" als auchübersetzt in
"Field_One": { "$ne": "" }
was sollte genau das sein was du suchst, wenn das Feld tatsächlich gefüllt mit ""Um zu testen, ein string nicht leer ist, in Javascript ist es einfach :
sehen $ne.
Ich kann mir nicht helfen, Sie zu übersetzen, dass in C# - Treiber Sprache.
Unter der Annahme, dass Sie Abfragen für Dokumente einer Klasse Suche so etwas wie:
Können Sie auch schreiben Sie Ihre Abfrage mithilfe von expression lambdas wie diese zum Beispiel: