Как создать документ Bson с нулевым значением с помощью официального драйвера C#?


У меня есть объекты с 3 строковыми полями страна, провинция, город. Они могут содержать null или некоторое строковое имя.

Я хочу запросить все данные с одинаковыми значениями.

Например, мне нужны все данные, где

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

Я создал BsonDocument:

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

Но нулевое поле было выброшено, и документ выглядит так:

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

Если я пытаюсь использовать

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

У меня есть исключение, говорящее, что параметр не может быть нулевым.

Как я вижу в документации нет проблема в построении проверки запроса, если значение равно null. Так что это проблема с драйвером C#. Есть идеи, как решить эту проблему?

2 7

2 ответа:

Зависит от типа данных переменной city. Если переменная 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());

Я предполагаю, что вы работаете с объектов bsondocument и не C# классов. Из-за этого, значения null, вы должны использовать BsonNull.Значение для представления нулевых значений в базе данных и в запросах.