Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create Bson Document with Null value using C# official driver?

I have objects with 3 string fields Country, Province, City. They can contain null or some string name.

I wanna query all data with the exact same values.

For Example i need all data where

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

I created BsonDocument:

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

But null field was thrown away and document looks like:

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

If i'm triing to use

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

I have exception saying that parametr cant be null.

As i see in documentation there is no problem in building query cheking if value equals null. So that is a problem with C# driver. Any ideas how to solve this problem?

like image 223
Pavel Luzhetskiy Avatar asked May 21 '12 13:05

Pavel Luzhetskiy


2 Answers

Depends on the data type of your city variable. If the city variable is of type BsonValue you can use the ?? operator directly:

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

If your city variable is of type string you need an extra conversion cast to make the compiler happy:

string city = null;
var query = Query.EQ("city", (BsonValue)city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());
like image 88
Robert Stam Avatar answered Nov 06 '22 03:11

Robert Stam


I assume you are working with BsonDocuments and not C# classs. Because of that, for null values, you need to use BsonNull.Value to represent null values in the database and in queries.

like image 3
Craig Wilson Avatar answered Nov 06 '22 01:11

Craig Wilson