2013-04-17 2 views
6

Я пытаюсь получить количество документов, у которых есть поле с пустой строкой. Это поле позволяет называть его «Field_One» присутствует во всех документах (поэтому, чтобы быть ясным, я не пытаюсь найти, существует ли это поле или нет, я хочу найти, какие документы не имеют ничего (пустая строка) в поле «Field_One» »Как проверить, что поле строки в документе MongoDB не пусто?

Я попытался с помощью (с помощью C# драйвер):.

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

и даже (кто-то предложил это где-то):

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

Но это не работает (они возвращают все документы).

Кроме того, в качестве связанного вопроса: Это лучший способ получить количество соответствующих документов в коллекции? Насколько я понимаю, он фактически не извлекает документы из базы данных в мою программу, поэтому подсчет подсчета выполняется на сервере MongoDB.

+0

подсчет да выполняется на сервере. точно так же, как проверка работоспособности, когда вы говорите пустую строку, отображается ли она как значение «», когда вы извлекаете документ и просматриваете это поле? –

+0

Привет, Ася, спасибо за ваш ответ. Я набрал JSON, и он показывает как «» для тех документов, у которых нет данных в этом поле. Итак, поле есть, типа String и имеет «» для некоторых документов и имеет информацию для других. –

+0

в оболочке mongo вы можете попробовать: db.collection.find ({поле: {$ type: 10}}). Проверьте эту документацию: http://docs.mongodb.org/manual/reference/operator/type/ – genericuser

ответ

6

Для того, чтобы проверить строку не пусто, в JavaScript, это просто:

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

см $ne. Я не могу помочь вам перевести это на язык языка C#.

10

BsonNull.Value переводит в нуль
BsonString.Empty переводит в «»
BsonObject.Create("") переводится в «», а также

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

переводит в "Field_One": { "$ne": "" }, что должно быть именно то, что вы ищете, если поле фактически заполнена ""

0

Предполагая, что вы запрашиваете документы класса, которые выглядят примерно так:

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

Вы также можете написать свой запрос, используя выражение лямбды, как это, например:

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