2013-10-14 55 views
3

沒有在http://www.yesodweb.com/book/persistent如何在persistent-mongoDB中使用MongoDB查詢選擇器? (耶索德)

任何文檔或例子也沒找到原始查詢的任何例子(顯然,rawQuery持久的MongoDB開不工作)。 我需要使用geospecial選擇器($ near),這就是爲什麼我不能只是打電話selectList

然而,有一個辦法做到這一點我想Database.MongoDB東西:

rawrecs <- runDB $ find (select 
["loc" =: [ 
    "$near" =: [ 
    "$geometry" =: [ 
     "type" =: ("Point"::String), 
     "coordinates" =: [ (28.483334::Double),(49.233334::Double) ] 
    ], 
    "$maxDistance" =: (1000::Int) 
    ] 
]] "points") { limit = 10 } >>= rest 
mapM_ (liftIO . putStrLn . show) rawrecs 

然後查詢結果轉化爲持久的實體。不錯,它可以工作,但看起來有點棘手。

有沒有人知道一個更正確的方式來執行此與persistent-mongoDB?

謝謝:)

回答

0

一)

{ _id : ObjectId(...), 
name : "...", 
addresses : [ { 
      context : "home" , 
      loc : [ 55.5, 42.3 ] 
      } , 
      { 
      context : "home", 
      loc : [ -74 , 44.74 ] 
      } 
      ] 
} 

B)

db.records.ensureIndex({ "addresses.loc": "2d" }) 

C)

db.places.find({ loc : 
       { $geoWithin : 
       { $geometry : 
        { type : "Polygon" , 
        coordinates : [ [ 
             [ 0 , 0 ] , 
             [ 3 , 6 ] , 
             [ 6 , 1 ] , 
             [ 0 , 0 ] 
            ] ] 
      } } } }) 

欲瞭解更多信息,你可以去

http://docs.mongodb.org/manual/administration/indexes-geo/

我不是很專業,但我希望我的回答可以幫助你...

+0

哦,我知道如何執行與geospecial選擇查詢,主要問題是在保持兼容與司機的mongodb爲haskell(persistent-mongoDB)。以防萬一,我添加了一個真實的例子。但是,無論如何感謝:) –