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