我有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#驱动程序的问题。任何想法如何解决这个问题?
答案 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来表示数据库和查询中的空值。