问题
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?
回答1:
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());
回答2:
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.
来源:https://stackoverflow.com/questions/10685890/how-to-create-bson-document-with-null-value-using-c-sharp-official-driver