2011-07-08 103 views
1

我剛剛下載了最新的官方10gen mongo c#驅動程序(1.1.0.4184),我試圖做我認爲是一個非常簡單的查詢來獲取基於位置的一些結果:Mongo geo結果與10gen官方c#驅動程序

MongoServer server = MongoServer.Create("xxxxxx"); 
MongoCredentials credentials = new MongoCredentials("user", "pw"); 
MongoDatabase mongoDB = server.GetDatabase("housing", credentials); 
MongoCollection _houses = housing.GetCollection(houses); 
var a = Query.WithinCircle("houseLocation", Double.Parse(latitude), double.Parse(longitude), maxDistance); //maxDistance is in radians 
var cursor = _houses.FindAs<House>(a); 
foreach (var b in cursor) 
{ 
    //something 
} 

如果我通過調試運行它,得到「枚舉沒有結果」。

我已經看到了很多代碼示例,似乎很多使用Find方法,我似乎沒有。如果我輸入_houses.Find(查詢)。我收到一個編譯錯誤,它找不到Find的定義。

我拉我的頭髮,因爲這應該是非常簡單的,這是令人沮喪的,因爲我試圖學習孟戈。任何幫助將不勝感激。謝謝!!

回答

0

最可能的FindAs返回沒有結果,因爲沒有文檔匹配查詢。我們必須查看一些示例文檔和參數的值,以確定它們與查詢不匹配的原因。

Find方法在MongoCollection < TDefaultDocument>類中定義,而不是在MongoCollection類(它是一個抽象基類)中定義。您沒有看到Find方法,因爲您已將_houses變量定義爲MongoCollection。

看起來你的集合對象應該有一個House的默認文檔類型。我建議你聲明變量_houses像這樣:

var _houses = mongoDB.GetCollection<House>("houses"); 
// or if you don't like var: 
MongoCollection<House> _houses = mongoDB.GetCollection<House>("houses"); 

進一步的說明你的地理查詢:如果你做球形查詢曾經計劃確保存儲在(經度,緯度)爲了您的數據。大多數地理查詢可以以任意順序(只要您保持一致)與經度和緯度一起工作,但球形查詢需要,順序爲(經度,緯度),所以我建議每個人從頭開始標準化。

+0

謝謝!這讓我在需要的地方。我將半徑轉換爲弧度,所以確實沒有結果。看來該方法使用公里或英里,你知道,還是它的腳? – Rizyak

相關問題