如何在persistent-mongoDB中使用MongoDB查询选择器? (耶索德)

时间:2013-10-14 11:09:13

标签: mongodb haskell yesod

http://www.yesodweb.com/book/persistent

中没有任何文档或示例

此外,我没有找到任何原始查询的示例(显然, rawQuery 不能与 persistent-mongoDB 一起使用)。 我需要使用地理选择器( $ 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更正确的方法?

谢谢:)

1 个答案:

答案 0 :(得分:0)

A)

  { _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/

我不是很专家,但我希望我的回答可以帮助你...