9

我有 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)

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

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

4

2 回答 2

16

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

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

如果你的城市变量是字符串类型,你需要一个额外的转换来让编译器满意:

string city = null;
var query = Query.EQ("city", (BsonValue)city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());
于 2012-05-22T19:17:30.327 回答
3

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

于 2012-05-21T13:31:52.890 回答