mongo를 사용하여 지리적 지점 근처의 위치를 쿼리하는 동안이 이상한 문제가 발생합니다. C# 드라이버를 통해 $ nearSphere로 필터링을 시도 할 때마다 필터는 지정된 범위에 있는지 여부에 관계없이 모든 일치를 반환합니다. 이상한 점은 mongo 셸 자체에서 동일한 쿼리가 작동하고 올바른 일치 항목 만 반환한다는 것입니다.geoSpatial 쿼리가 mongo 셸에서 찾지 만 C# 드라이버에서 필터링되지 않습니다.
예.
데이타베이스에 Type : Point (C# 드라이버에서 직렬화 된 GeoJsonPoint 객체로 생성 됨)에 정의 된 RoomLocation 필드가있는 몇 개의 룸 객체가 데이터베이스에 있습니다. 이 포인트는 좌표가 [0, 0]과 [3, 3]이고 최대 거리가 3 인 [0, 0]에서 쿼리하므로 두 번째 포인트를 찾을 수 없습니다 (지리적 위치이므로 잘 작동 만 [0, 0] 포인트 반환
db.Rooms.find({
"RoomLocation":
{ $nearSphere:
{ $geometry: { type: "Point", coordinates: [0, 0]},
$maxDistance: 3
}
}
}
)
: 거리 내가 실행 해요 쿼리는
) 확실히 3. km의 좋은 수백해야합니다. 그러나, 나는 내 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, I 쉘에서와 같은 방식으로, 이 쿼리의 결과에는 두 점이 모두 포함됩니다.
색인은 RoomLocation 필드에 올바르게 설정됩니다.
내가 여기 만들고있는 분명한 실수를 볼 수 있습니까? 왜냐하면 나는 지금 무슨 일이 일어나고 있는지 정말로 확신하지 못하기 때문입니다.
감사합니다.