Finally, It's work fine.
BsonDocument geoPoint = new BsonDocument
{
{"type","Point"},
{"coordinates",new BsonArray(new Double[]{double.Parse(lon), double.Parse(lat)})}
};
BsonDocument query = new BsonDocument
{
{
"$eq", new BsonArray {"City", "Bangkok" }
}
};
BsonDocument geoNearOptions = new BsonDocument
{
{"spherical", true},
{"limit", 10000}, //need to test to see what limit is appropriate, should we do a filter first?
{"maxDistance", 400},
{"query",filter},
{"near",geoPoint},
{"distanceField","dist.distance"},
{"includeLocs", "dist.location"},
};
var stage = new BsonDocumentPipelineStageDefinition<BsonDocument, BsonDocument>(new BsonDocument { { "$geoNear", geoNearOptions } });
var colAggregate = collection2.Aggregate().AppendStage(stage).Sort(new BsonDocument { { "_id", 1 } });