У меня возникает эта странная проблема при использовании mongo для запроса местоположений вблизи географической точки. Я замечаю, что всякий раз, когда я пытаюсь фильтровать $ nearSphere через драйвер C#, фильтр просто возвращает все совпадения независимо от того, находятся ли они в заданном диапазоне или нет. Что более странно в том, что тот же самый запрос работает в оболочке mongo и возвращает только правильные совпадения.GeoSpatial запросы работают в оболочке mongo, но не фильтруются в C#-драйвере
E.g.
У меня есть несколько объектов комнаты в базе данных, которые имеют поле RoomLocation, которое определено в базе данных как тип: Point (Создано в C# -кодере как объект GeoJsonPoint, который затем сериализуется). Эти точки имеют координаты [0, 0] и [3, 3], и я запрашиваю от [0, 0] с максимальным расстоянием 3, поэтому вторая точка не должна быть найдена (это географические местоположения, поэтому расстояние должно быть хорошим несколько сотен километров, конечно, не 3.)
запрос Я бегу это:
db.Rooms.find({
"RoomLocation":
{ $nearSphere:
{ $geometry: { type: "Point", coordinates: [0, 0]},
$maxDistance: 3
}
}
}
)
Который работает нормально и только возвращает [0, 0] указывают. Однако, если я запускаю следующий код в моем проекте C#:
FilterDefinition<GameRoom> filter = Builders<GameRoom>.Filter
.NearSphere(room => room.RoomLocation, location.Longitude, location.Latitude, i_SearchRadius);
IFindFluent<GameRoom, String> gameModes = Mongo.Database.GetCollection<GameRoom>("Rooms")
.Find(filter)
.Project(room => room._id.ToString());
И называть его на месте = новый GeoPoint (0, 0), i_SearchRadius = 3, таким же образом, как и я в оболочке, то результат этого запроса будет включать обе точки.
Указатель правильно настроен в поле RoomLocation.
Может ли кто-нибудь увидеть явную ошибку, которую я здесь делаю? Поскольку я действительно не уверен, что происходит прямо сейчас.
Спасибо.