2012-09-22 117 views
4

我正在使用spring-data與mongodb進行通信,我正在尋找一種方法來執行地理查詢,該地理查詢將通過來自數據庫的給定地理點的配置文件檢索到,我的查詢要求是:彈簧數據mongodb地理查詢

1)由距離限制
2)限制通過的返回型材
3)根據附加的搜索時間字段中的簡檔文件
4),以包括/排除從檢索到的文檔字段的能力在數

起初我用蒙oTemplate.geoNear方法...

Query criteria = new Query(Criteria.where("time").gte("some_date")); 
    criteria.fields().exclude("friends"); 
    NearQuery query = NearQuery.near(point).maxDistance(maxDistance) 
      .num(limit).query(criteria); 
    GeoResults<Profile> result = mongoTemplate 
      .geoNear(query, Profile.class);<br/> 

但後來我意識到,蒙戈不包括/不包括geoNear查詢字段支持。
所以我想查詢,似乎只有這樣,才能執行那種在春天數據「複雜」的查詢是通過使用@Query註釋,是有支持要求2,3的方式上面那種查詢?任何其他方式?
謝謝

+0

你有沒有找到任何解決辦法? – gabby

+0

Assaf - 你有解決方案嗎?請幫助我..謝謝,Neha – 2015-10-15 12:52:07

+0

在這裏的任何消息?我如何排除字段? – Fritz

回答

1

您的問題實際上以所有您需要的答案爲特色。你只需要使用query.addCriteria將它們放在一起。

1:使用圓的半徑
2.使用Query.limit(計數)
3.使用Query.where( 「日期」)GTE()
4.使用領域的項目成果。

在這裏你去

Point point = new Point(6.12343, 3.121211); 
    Distance distance = new Distance(100, Metrics.KILOMETERS); 
    Circle circle = new Circle(point, distance); 
    Integer resultLimit = 20; //Limit to 20 records 
    Criteria geoCriteria = Criteria.where("position").withinSphere(circle); 
    Criteria timeCriteria = Criteria.where("time").gte(new Date()); 
    Query query = Query.query(geoCriteria); 
    query.addCriteria(timeCriteria); 
    query.fields().exclude("friends"); 
    mongoTemplate.find(query, Profile.class);