当前位置: 首页 > 知识库问答 >
问题:

spring Java中MongoDB集合中的2dsphere索引未获取

公冶安怡
2023-03-14

我的问题与[这里][1]相同。我已经创建了一个索引“2dsphere”,但从spring Java获取数据时,它告诉我在该特定列上创建一个索引,以触发对该列的地理空间查询。您能告诉我如何从spring Java获取地理空间索引吗?

这是我在mongoDB中的收藏结构:

{
"_id" : ObjectId("5729f6f0daf5583ade68b277"),
"type" : "Feature",
"geometry" : {
    "type" : "Polygon",
    "coordinates" : [ 
        [ 
            [ 
                -61.392147064209, 
                12.5836229324341
            ], 
            [ 
                -61.3972930908203, 
                12.5838899612427
            ], 
            [ 
                -61.401252746582, 
                12.5869073867798
            ], 
            [ 
                -61.3977165222168, 
                12.5903301239014
            ], 
            [ 
                -61.3904685974121, 
                12.5893573760986
            ], 
            [ 
                -61.388843536377, 
                12.587965965271
            ], 
            [ 
                -61.3890991210938, 
                12.5845184326172
            ], 
            [ 
                -61.392147064209, 
                12.5836229324341
            ]
        ]
    ]
},
"properties" : {
    "TZID" : "America/St_Vincent"
}
}

以及要创建索引查询的查询:

db.timezone.createIndex({"geometry":"2dsphere"})

@Repository
public class MongoDaoImpl extends BaseMongoDaoImpl implements MongoDao{

public static final Logger logger=LoggerFactory.getLogger(MongoDaoImpl.class);

@Autowired
MongoTemplate mongoTemplate;

@Override
public String getTimezoneIdFromLatLong(Double lat, Double longi){
    String TZId=null;
    try{
        Query query = new Query(new Criteria()
                        .and("geometry")
                        .near(new Point(lat, longi)).maxDistance(0)).limit(1);
        query.fields().include("properties.TZID").exclude("_id");   
        logger.info("Mongo query : " + query.toString());
        TZId =  mongoTemplate.find(query, String.class,"timezone").get(0);

        logger.info("Getting the TimezoneId of Lat and long : "+ TZId);
    }catch(Exception e){
        logger.error("Exception occured while getting TimezoneId from lat & long", e);
    }
    return TZId;

}
}

所以,我试图运行上面的代码,然后它在控制台给我下面的错误。

2016-06-03 12:15:52185[http-nio-8321-exec-3:a7827b0e-eb2e-4485-a385-e6a8a1dd765d]信息::,-Mongo查询:查询:{“geometry”:{“$near”:{$java:Point[x=-61.338249,y=12.691054]},“$maxDistance”:0.0},字段:{“properties.TZID”:1,“\u id”:0},排序:null

524e89638c4d]错误::,-从lat获取TimezoneId时发生异常


共有1个答案

常雅珺
2023-03-14

经过这么多挣扎,我找到了不使用标准的答案。下面这个是使用不使用Spring...也就是说只有java这绝对会帮助你

MongoClient mongoClient = new MongoClient("localhost" , 27017 );
DB db = mongoClient.getDB("services");
DBCollection collection=  db.getCollection("timezone");
BasicDBObject point = new BasicDBObject("type", "Point");
double[] ptCordinate={lat,longi};
point.put("coordinates", ptCordinate);

BasicDBObject query = new BasicDBObject(
    "geometry", new BasicDBObject(
        "$near", new BasicDBObject(
            "$geometry", point
        )
    )
);
collection.findOne(query);
 类似资料:
  • 我有一个名为search2的集合,里面有大约20000个这样的文档: 集合上只有这个索引和“_id”字段上的默认索引。 当我执行以下查询时,我希望“nscannedObjects”为=10: 但结果是这样的: 提前致谢

  • 我正在使用MongoDB 2.6标准。我已经成功地创建了多个集合,插入数据,查询数据等。在Mongo shell内部工作良好,以及从使用MongoSkin的NodeJS应用程序。到目前为止,一切都很好。现在我需要使用第三方工具(D2RQ)来访问数据。似乎D2RQ使用_schema集合来获取集合名称,列名,数据类型等。D2RQ适用于其中三个集合,因为集合在MongoDB中_schema。第四个集合不

  • 我有用于数据库的Spring Boot App和MongoDB。 在数据库中,我有一个集合packageholiday,其中有一些元素,这是JSON: 我的目标是什么: 正如你们所见,我在集合中有这样的数组: 所以我的问题实际上是创建API,它将从集合中返回具有指定的元素。 例如 的API 例如,对于相同的 的API 我怎样才能做到这一点?这样可能吗?

  • 我正在尝试在MongoDb中插入数据并在ES上查看 mongo db中的数据在db:testmongo collection:person中 现在,当我做的时候 我得到了 但在浏览器上键入时 谢谢

  • 问题内容: 我有一个QuerySet,让我们称之为,它是由与该问题无关的某些属性排序的。然后有一个对象,我们称它为。现在,我想尽可能 高效 地知道in中的索引。我知道我可以在Python中使用它,也可以通过将每个对象与进行比较来循环,但是执行此操作的最佳方法是什么?我正在寻找高性能,这是我唯一的标准。 __ 在Windows上将Python 2.6.2与Django 1.0.2结合使用。 问题答案

  • 我有一个名为product的MongoDB集合,其中包含以下文档,如下所示。 我想查询收款情况,只退回价格最低的单据,例如: 但当我运行聚合查询时: 它只返回一个文档。