如何测试MongoDB文档中的字符串字段不是空的

本文关键字:字符串 字段 文档 何测试 测试 MongoDB | 更新日期: 2023-09-27 18:09:46

我试图获得具有空字符串字段的文档数量。这个字段,我们称之为"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服务器中完成的。

如何测试MongoDB文档中的字符串字段不是空的

BsonNull.Value翻译成null
BsonString.Empty翻译成"
BsonObject.Create("")也可以翻译成"

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

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

,则应该正是您正在寻找的内容。

为了测试字符串是否为空,在Javascript中只需:

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

看到美元ne。我不能帮你把它翻译成c#驱动语言。

假设您正在查询一个类的文档,如下所示:

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

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

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