我对mongo有一个非常简单的查询:
db.items.find( { MyFieldName: { $exists: true, $eq: null } } );
不需要解释它,而是查找具有
MyFieldName
且该字段的值为null
的文档。使用C#驱动程序似乎很简单:var fieldExistsFilter= Builders<BsonDocument>.Filter.Exists("MyFieldName", true);
var fieldValueIsNullFilter = Builders<BsonDocument>.Filter.Eq("MyFieldName", null);
但是,如果我尝试检查是否为null,则不会构建第二个过滤器
fieldValueIsNullFilter
。如果我写"testString"
或类似的东西,但不能使用null,则可以正常工作。tl:dr;版本:如何创建过滤器以检查MongoDb C#驱动程序中的字段是否为空?
注意,我检查了其他答案,他们建议$ exists可以满足我的要求-而不是按照mongo docs:
最佳答案
实际上,这可以按预期工作,但需要进行一些修改,具体取决于:
有关详情,请参见此问题:
How to create Bson Document with Null value using C# official driver?
因此查询为:
var fieldValueIsNullFilter = Builders<BsonDocument>.Filter.Eq("MyFieldName", BsonNull.Value);
最初,我没有意识到
BsonNull
具有Value
属性。