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

时间:2012-05-21 13:10:09

标签: mongodb mongodb-.net-driver

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

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

例如,我需要所有数据

City = null,
Province = "WA",
Country = "USA"

我创建了BsonDocument:

var lookup = new QueryDocument
{
    {"GeoPosition.City", userLocation.City},
    {"GeoPosition.Province", userLocation.Province},
    {"GeoPosition.Country", userLocation.Country}
};

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

{
    "GeoPosition.Province" : "WA",
    "GeoPosition.Country" : "USA"
}

如果我正在使用

Query.EQ("GeoPosition.City", userLocation.City)

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

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

2 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:2)

我假设您正在使用BsonDocuments而不是C#类。因此,对于null值,您需要使用BsonNull.Value来表示数据库和查询中的空值。