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?
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());
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With