如何测试MongoDB文档中的字符串字段是否为空?

时间:2013-04-17 16:02:40

标签: c# mongodb mongodb-query mongodb-.net-driver

我正在尝试获取具有空字符串的字段的文档数。这个字段,让我们称之为“Field_One”存在于所有文档中(因此,要清楚,我不是要查找该字段是否存在,我想在字段中找到哪些文档没有任何内容(空字符串)“Field_One ”

我尝试使用(使用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服务器中完成。

3 个答案:

答案 0 :(得分:11)

BsonNull.Value转换为null
BsonString.Empty转换为“” BsonObject.Create("")也转换为“”

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

转换为"Field_One": { "$ne": "" }如果该字段实际上填充了“

,则应该正是您要查找的内容

答案 1 :(得分:7)

为了测试字符串不为空,在Javascript中它只是:

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

$ne。 我无法帮你翻译成C#驱动程序语言。

答案 2 :(得分:0)

假设您正在查询类似于以下内容的类文档:

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

你也可以使用像这样的表达式lambdas编写你的查询,例如:

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