【问题标题】:Spring-data mongodb geo querySpring-data MongoDB地理查询
【发布时间】:2012-09-22 20:27:09
【问题描述】:

我正在使用 spring-data 与 mongodb 通信,我正在寻找一种执行地理查询的方法,该查询将通过数据库中给定的地理点检索附近的配置文件,我对查询的要求是:

1) 距离限制
2) 返回配置文件数量的限制
3) 根据配置文件中的时间字段进行额外搜索
4) 从检索到的文档中包含/排除字段的能力

一开始我用的是mongoTemplate.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/>

但后来我意识到 mongo 不支持在 geoNear 查询中包含/排除字段。
所以我正在考虑 Near 查询,似乎在 spring-data 中执行这种“复杂”查询的唯一方法是使用 @Query 注释,是否存在在那种查询中支持上述要求 2,3 的方法?还有其他方法吗?
谢谢

【问题讨论】:

  • 你找到解决办法了吗?
  • Assaf - 你找到解决方案了吗?请帮帮我.. 谢谢,内哈
  • 这里有什么消息吗?如何排除字段?

标签: mongodb geolocation spring-data


【解决方案1】:

你的问题实际上包含了你需要的所有答案。您只需要使用 query.addCriteria 将它们放在一起即可。

1:使用带半径的圆
2. 使用 Query.limit(count)
3. 使用 Query.where("date").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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2018-11-25
    • 2020-10-07
    • 2014-11-28
    相关资源
    最近更新 更多