Spring mongoDB地理查询

Spring mongoDB地理查询,spring,spring-data-mongodb,Spring,Spring Data Mongodb,嗨,我熟悉spring,但不熟悉mongoDB 我有一个简单的类,它具有一个名为couponCoordinates的GeoJsonPoint属性 我还使用以下方法创建了一个接口 public List<Coupon> findByCouponCoordinatesNear(Point point ,Distance distance); 我知道我可以手动添加索引,如果我这样做的话,实际上查询效果很好。但我有以下问题: 使用GeoJsonPoint是一种良好的做法吗 有没有办法通过代

嗨,我熟悉spring,但不熟悉mongoDB 我有一个简单的类,它具有一个名为couponCoordinates的GeoJsonPoint属性

我还使用以下方法创建了一个接口

public List<Coupon> findByCouponCoordinatesNear(Point point ,Distance distance);
我知道我可以手动添加索引,如果我这样做的话,实际上查询效果很好。但我有以下问题:

  • 使用GeoJsonPoint是一种良好的做法吗
  • 有没有办法通过代码添加索引
  • 它是否与
    @compoundexes
    注释相关
  • 谢谢

    更新:

    以下是创建的查询:

    >  main] o.s.data.mongodb.core.MongoTemplate      : Inserting DBObject containing fields: [_class, _id, businessName, businessDescription, couponName, couponDescription, couponWhatsappNumber, couponAddress, couponCoordinates, category, active] in collection: coupon
    2015-05-08 10:00:48.921 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoDbUtils       : Getting Mongo Database name=[cuponza]
    2015-05-08 10:00:49.389 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoTemplate      : Inserting DBObject containing fields: [_class, _id, businessName, businessDescription, couponName, couponDescription, couponWhatsappNumber, couponAddress, couponCoordinates, category, active] in collection: coupon
    2015-05-08 10:00:49.390 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoDbUtils       : Getting Mongo Database name=[cuponza]
    2015-05-08 10:00:49.411 DEBUG 12228 --- [           main] o.s.d.m.r.query.MongoQueryCreator        : Created query Query: { "couponCoordinates" : { "$nearSphere" : { $java : Point [x=6.213700, y=-75.576700] }, "$maxDistance" : 1.567855942887398E-4 } }, Fields: null, Sort: null
    2015-05-08 10:00:49.416 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoTemplate      : find using query: { "couponCoordinates" : { "$nearSphere" : { "x" : 6.2137 , "y" : -75.5767} , "$maxDistance" : 1.567855942887398E-4}} fields: null for class: class com.datasol.cuponza.model.Coupon in collection: coupon
    2015-05-08 10:00:49.417 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoDbUtils       : Getting Mongo Database name=[cuponza]
    2015-05-08 10:00:49.436 DEBUG 12228 --- [           main] o.s.d.m.r.query.**MongoQueryCreator        : Created query Query: { "couponCoordinates" : { "$nearSphere" : { $java : Point [x=6.213700, y=-75.576700] }, "$maxDistance" : 0.002351783914331097 } }, Fields: null, Sort: null**
    2015-05-08 10:00:49.438 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoTemplate      : find using query: { "couponCoordinates" : { "$nearSphere" : { "x" : 6.2137 , "y" : -75.5767} , "$maxDistance" : 0.002351783914331097}} fields: null for class: class com.datasol.cuponza.model.Coupon in collection: coupon
    2015-05-08 10:00:49.438 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoDbUtils       : Getting Mongo Database name=[cuponza]
    2015-05-08 10:00:49.443 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoTemplate      : find using query: { } fields: null for class: class com.datasol.cuponza.model.Coupon in collection: coupon
    2015-05-08 10:00:49.443 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoDbUtils       : Getting Mongo Database name=[cuponza]
    Cleaning repository
    2015-05-08 10:00:49.446 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoDbUtils       : Getting Mongo Database name=[cuponza]
    2015-05-08 10:00:49.447 DEBUG 12228 --- [           main] o.s.data.mongodb.core.MongoTemplate      : Remove using query: { } in collection: coupon.
    
    更新二 有一个注释应该就是这样做的 我把它放在优惠券类(有@Document注释)中,如下所示

    @GeoSpatialIndexed(name="GeoIndex_2d")
    private Point couponCoordinates;
    
    但索引并没有创建 似乎MongopersistenteEntityIndexcreator类没有拾取它

    更新二 这是POJO

    @Document
    public class Coupon {
    
    @Id
    private String couponId;
    
    private String businessName;
    
    private String businessDescription;
    
    private String couponName;
    
    private String couponDescription;
    
    private String couponWhatsappNumber;
    
    private String couponAddress;
    
    @GeoSpatialIndexed(name="GeoIndex_2d")
    private Point couponCoordinates;
    
    private CategoryEnum category;
    
    @TextIndexed
    private Set<String> keywords;
    
    private Boolean active;
    
    public Coupon (){}
    
    
    //getters and setters
    
    @文档
    公务舱优惠券{
    @身份证
    私有字符串couponId;
    私有字符串商业名称;
    私有字符串业务描述;
    私有字符串couponName;
    私有字符串耦合描述;
    私有字符串耦合WhatsAppNumber;
    私有字符串耦合地址;
    @地理空间索引(name=“GeoIndex\u 2d”)
    专用点耦合坐标;
    私有类别;
    @文本索引
    私有集关键字;
    私有布尔活动;
    公共优惠券(){}
    //接球手和接球手
    
    这里是接口

    public interface CouponRepository extends MongoRepository<Coupon, String> {
    
       public List<Coupon> findByCouponCoordinatesNear(Point point ,Distance distance);
    }
    
    public interface CouponRepository扩展了MongoRepository{
    公共列表由组坐标(点、点、距离)查找;
    }
    
    您使用的是哪个版本的spring data mongodb?您的mongodb服务器的版本是什么?您可以为
    优惠券
    +stacktracke添加代码吗?您可以为
    MongoTemplate启用Loing并发布创建的查询吗?mongodb外壳版本:3.0.1 spring mongo org.springframework。数据:spring data mongodb:jar:1.7.0.RELEASE:编译生成的查询,我想我必须更改日志设置???只需将
    添加到logback.xml中,您就可以看到查询了。Christopth,我添加了日志,但我的问题是,是否有方法使用注释(@index@compoundex)在类级别以编程方式添加索引,而不是转到mongoDB命令行并将其添加到那里,这也适用于需要创建索引的文本搜索如果您打算自动创建索引,则应该使用
    @GeoSpatialIndexed
    注释。让我有点担心的是,查询创建者似乎使用
    生成球形查询$nearSphere
    虽然实际定义是非球形的。未创建索引的一种可能性可能是域类型中的循环属性引用-如果是这样,日志中应该有一条消息。您有没有可能告诉我一些可以运行的代码?
    public interface CouponRepository extends MongoRepository<Coupon, String> {
    
       public List<Coupon> findByCouponCoordinatesNear(Point point ,Distance distance);
    }