[英]maxDistance parameter of Query.Near not working
我正在使用MongoDB的C#驅動程序,並試圖獲取Query.Near,以便在距中心點5、10、25或50英里的范圍內返還待售房屋。 這是查詢:
var near = Query.Near("Coordinates", coordinates.Latitude, coordinates.Longitude, find.GetRadiansAway(), false);
//var near = Query.WithinCircle("Coordinates", coordinates.Latitude, coordinates.Longitude, find.GetRadiansAway(), false);
var query = Collection().Find(near);
query.Limit = 1000;
var listings = query.ToList();
我將英里半徑除以62.1868289以獲取弧度並將其輸入到查詢中,但是無論我傳遞什么弧度值,它都會返回相同數量的待售房屋。我還嘗試將球面參數設置為true和使用Query.WithinCircle,但是效果都不佳。
我正在使用最新的C#驅動程序(1.0.0.4098),這是C#驅動程序中的錯誤,還是MongoDB中的錯誤,還是我在這里錯過了一些東西?
這是查詢的樣子:
5英里遠(在附近):
db.Listing.find({ "Coordinates" : { "$near" : [39.4812172, -76.6438598], "$maxDistance" : 0.072463768115942032 } });
10英里遠(在附近):
db.Listing.find({ "Coordinates" : { "$near" : [39.4812172, -76.6438598], "$maxDistance" : 0.14492753623188406 } });
5英里遠(球面附近):
db.Listing.find({ "Coordinates" : { "$nearSphere" : [39.4812172, -76.6438598], "$maxDistance" : 0.0012629451881788331 } });
10英里遠(球面附近):
db.Listing.find({ "Coordinates" : { "$nearSphere" : [39.4812172, -76.6438598], "$maxDistance" : 0.0025258903763576662 } });
無論我通過5英里還是25英里,這都是我的測試用例,它返回相同的結果數:
[Test]
public void NearTest()
{
var isSpherical = true;
var latitude = 39.4812172;
var longitude = -76.6438598;
var milesAway = 5;
var distance = milesAway / (isSpherical ? 3959.0 : 69.0);
//search within 5 miles.
var near = Query.Near("Coordinates", latitude, longitude, distance, isSpherical);
var collection = ContextWorker.Database.GetCollection<Schemas.Listing.Listing>("Listing");
var query = collection.Find(near);
query.Limit = 1000;
var listings = query.ToList();
var count1 = listings.Count;
//Console.WriteLine("query: {0}", query.ToJson());
Console.WriteLine(count1 + " results returned that are " + milesAway + " miles away");
//search within 25 miles.
milesAway = 25;
distance = milesAway / (isSpherical ? 3959.0 : 69.0);
near = Query.Near("Coordinates", latitude, longitude, distance, isSpherical);
query = collection.Find(near);
query.Limit = 1000;
listings = query.ToList();
var count2 = listings.Count;
//Console.WriteLine("query: {0}", query.ToJson());
Console.WriteLine(count2 + " results returned that are " + milesAway + " miles away");
//values should be different.
Assert.AreNotEqual(count1, count2, "Returned same results for 5 and 25 miles away");
}
172 results returned that are 5 miles away
172 results returned that are 25 miles away
Test 'Housters.Test.SearchTest.NearTest' failed:
Returned same results for 5 and 25 miles away
Expected: not 172
But was: 172
SearchTest.cs(68,0): at Housters.Test.SearchTest.NearTest()
這里有很多問題:
您上面執行的轉換實際上更接近從英里到度的轉換(以英里為單位的距離除以約69)。
確定問題是C#驅動程序還是查詢本身的一個好方法是首先使查詢在mongo shell中運行。 然后,您可以使用“ C#查詢”構建器編寫等效查詢。 作為最終檢查,您可以看到等效的JSON查詢如下:
var query = Query.Near(...); var json = query.ToJson();
您能否提供一些您認為應該退還的樣本文件?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.