Skip to content

Commit 6a182f4

Browse files
author
rstam
committed
CSHARP-950: For GeoJson $near queries $maxDistance goes inside $near.
1 parent 14e7c52 commit 6a182f4

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

MongoDB.Driver/Builders/QueryBuilder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,13 +376,13 @@ public static IMongoQuery Near<TCoordinates>(string name, GeoJsonPoint<TCoordina
376376
throw new ArgumentNullException("point");
377377
}
378378

379-
var geoDoc = new BsonDocument("$geometry", BsonDocumentWrapper.Create(point));
380379
var op = spherical ? "$nearSphere" : "$near";
381-
var condition = new BsonDocument(op, geoDoc);
380+
var geometry = new BsonDocument("$geometry", BsonDocumentWrapper.Create(point));
382381
if (maxDistance != double.MaxValue)
383382
{
384-
condition.Add("$maxDistance", maxDistance);
383+
geometry.Add("$maxDistance", maxDistance);
385384
}
385+
var condition = new BsonDocument(op, geometry);
386386

387387
return new QueryDocument(name, condition);
388388
}

MongoDB.DriverUnitTests/Builders/QueryBuilderTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -470,19 +470,19 @@ public void TestNearWithGeoJsonWithMaxDistance()
470470
{
471471
var point = GeoJson.Point(GeoJson.Geographic(40, 18));
472472
var query = Query.Near("loc", point, 42);
473-
var expected = "{ 'loc' : { '$near' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] } }, '$maxDistance' : 42.0 } }".Replace("'", "\"");
474-
Assert.AreEqual(expected, query.ToJson());
475-
Assert.AreEqual(NegateArbitraryQuery(expected), Query.Not(query).ToJson());
473+
var selector = "{ '$near' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] }, '$maxDistance' : 42.0 } }".Replace("'", "\"");
474+
Assert.AreEqual(PositiveTest("loc", selector), query.ToJson());
475+
Assert.AreEqual(NegativeTest("loc", selector), Query.Not(query).ToJson());
476476
}
477477

478478
[Test]
479479
public void TestNearWithGeoJsonWithSpherical()
480480
{
481481
var point = GeoJson.Point(GeoJson.Geographic(40, 18));
482482
var query = Query.Near("loc", point, 42, true);
483-
var expected = "{ 'loc' : { '$nearSphere' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] } }, '$maxDistance' : 42.0 } }".Replace("'", "\"");
484-
Assert.AreEqual(expected, query.ToJson());
485-
Assert.AreEqual(NegateArbitraryQuery(expected), Query.Not(query).ToJson());
483+
var selector = "{ '$nearSphere' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] }, '$maxDistance' : 42.0 } }".Replace("'", "\"");
484+
Assert.AreEqual(PositiveTest("loc", selector), query.ToJson());
485+
Assert.AreEqual(NegativeTest("loc", selector), Query.Not(query).ToJson());
486486
}
487487

488488
[Test]

MongoDB.DriverUnitTests/Builders/QueryBuilderTypedTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ public void TestNearWithGeoJsonWithMaxDistance()
682682
{
683683
var point = GeoJson.Point(GeoJson.Geographic(40, 18));
684684
var query = Query<A>.Near(a => a.X, point, 42);
685-
var expected = "{ 'x' : { '$near' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] } }, '$maxDistance' : 42.0 } }".Replace("'", "\"");
685+
var expected = "{ 'x' : { '$near' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] }, '$maxDistance' : 42.0 } } }".Replace("'", "\"");
686686
Assert.AreEqual(expected, query.ToJson());
687687
}
688688

@@ -691,7 +691,7 @@ public void TestNearWithGeoJsonWithSpherical()
691691
{
692692
var point = GeoJson.Point(GeoJson.Geographic(40, 18));
693693
var query = Query<A>.Near(a => a.X, point, 42, true);
694-
var expected = "{ 'x' : { '$nearSphere' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] } }, '$maxDistance' : 42.0 } }".Replace("'", "\"");
694+
var expected = "{ 'x' : { '$nearSphere' : { '$geometry' : { 'type' : 'Point', 'coordinates' : [40.0, 18.0] }, '$maxDistance' : 42.0 } } }".Replace("'", "\"");
695695
Assert.AreEqual(expected, query.ToJson());
696696
}
697697

0 commit comments

Comments
 (0)