Вопрос по mongodb-.net-driver, mongodb – Как создать документ Bson с нулевым значением, используя официальный драйвер C #?

7

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

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

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

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)

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

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

Ваш Ответ

2   ответа
2

Я предполагаю, что вы работаете с BsonDocuments, а не с C # classs. Из-за этого для нулевых значений необходимо использовать BsonNull.Value для представления нулевых значений в базе данных и в запросах.

Понятия не имею, как использовать это в этом случае. Не могу написать что-то вроде userLocation.City??BsonNull.Value там не того же типа. Там должен быть очень простой способ, который я просто не вижу. Pavel Luzhetskiy
попробуйте это: Query.EQ (& quot; GeoPosition.City & quot ;, BsonValue.Create (userLocation.City)).
Крейг, который выдает ошибку, если userLocation.City имеет значение null.
10

имеет тип 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());

Похожие вопросы