如何使用C#官方驱动程序创建具有Null值的Bson Document?

Pav*_*kiy 7 mongodb mongodb-.net-driver

我有3个字符串字段Country,Province,City的对象.它们可以包含null或一些字符串名称.

我想用完全相同的值查询所有数据.

例如,我需要所有数据

City = null,
Province = "WA",
Country = "USA"
Run Code Online (Sandbox Code Playgroud)

我创建了BsonDocument:

var lookup = new QueryDocument
{
    {"GeoPosition.City", userLocation.City},
    {"GeoPosition.Province", userLocation.Province},
    {"GeoPosition.Country", userLocation.Country}
};
Run Code Online (Sandbox Code Playgroud)

但是null字段被丢弃了,文档看起来像:

{
    "GeoPosition.Province" : "WA",
    "GeoPosition.Country" : "USA"
}
Run Code Online (Sandbox Code Playgroud)

如果我正在使用

Query.EQ("GeoPosition.City", userLocation.City)
Run Code Online (Sandbox Code Playgroud)

我有例外说参数不能为空.

正如我在文档中看到的那样,如果value等于null,则构建查询检查没有问题.所以这是C#驱动程序的问题.任何想法如何解决这个问题?

Rob*_*tam 11

取决于您的城市变量的数据类型.如果city变量的类型为BsonValue,你可以使用?? 直接运营商:

BsonValue city = null;
var query = Query.EQ("city", city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());
Run Code Online (Sandbox Code Playgroud)

如果您的city变量是string类型,则需要额外的转换强制转换以使编译器满意:

string city = null;
var query = Query.EQ("city", (BsonValue)city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());
Run Code Online (Sandbox Code Playgroud)