我对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属性。

09-10 11:36