我使用Spring Data的NearQuery操作执行了一个近似查询。大多数情况下,一切都很好。但是,我在几台测试机器和一台生产机器上有我的代码。这个查询可以在一些测试机器上运行,但是它不会返回生产机器和我的一台测试机器上新创建的对象的结果。当我将mongodb集合放在不工作的机器上,然后使用相同的代码插入新文档并重新创建集合时,查询开始再次工作。我的问题是:什么会导致这种类型的行为?向类添加新变量会导致mongodb near查询停止执行吗?如果添加到集合中的文档的变量不同于已有的变量,这会导致问题吗?在生产中,我不能简单地删除集合来修复这个问题。在保持mongodb集合中的数据一致性以使我的spring mongodb代码继续工作方面,我是否遗漏了什么?
mongoTemplate代码:
Point point = new Point(locationAsDoubleArray[0],locationAsDoubleArray[1]);
NearQuery query = NearQuery.near(point.getX(),point.getY()).spherical(true).maxDistance(maxDistance,Metrics.MILES).distanceMultiplier(Metrics.MILES).query(regularQuery);//maxDistance(new Distance(radius,Metrics.MILES));
GeoResults<CalendarEvent> results = ((MongoOperations)mongoTemplate).geoNear(query, CalendarEvent.class);需要以JSON格式返回的文档:
{ "_class" : "com.eatmyfish.services.custom.CalendarEvent" , "_id" : { "$oid" : "5011c5cf51527fce6c4d2a00"} , "_keywords" : [ "test" , "search" , "function" , "test" , ""] , "address1" : "221 East 5th Street" , "address2" : "" , "allDay" : false , "categories" : [ 14] , "city" : "Saint Paul" , "clientId" : 109 , "clientProductId" : 962 , "color" : "#003666" , "createUser" : "peterson.dean" , "description" : "test" , "end" : "2012-07-26 14:00:00" , "endDate" : { "$date" : "2012-07-26T19:00:00.000Z"} , "externalLink" : "<a href='http://'>More Info</a>" , "geoLocation" : [ -93.0875195 , 44.9490055] , "latitude" : 0.0 , "location" : "221 East 5th Street Saint Paul,MN 55101 " , "locationManuallyEntered" : false , "locationName" : "My Cubicle" , "longitude" : 0.0 , "moreInfoLink" : "<a href='http://localhost:8080/posts/list/3150.page'>More Info</a>" , "note" : "" , "privateEventIn" : "N" , "restFormattedAddress" : "221+East+5th+Street+Saint+Paul,+MN+55101" , "start" : "2012-07-26 04:00:00" , "startDate" : { "$date" : "2012-07-26T09:00:00.000Z"} , "state" : "MN" , "title" : "Test Search Function" , "topicId" : 3150 , "url" : "http://localhost:8080/posts/list/3150.page" , "zip" : "55101"}根据正在运行的机器,代码的工作方式会有所不同。我已经确保了我的jar文件等在每台机器上都是相同的。一旦查询开始失败,唯一能使它工作的事情就是丢弃集合并重新开始。但是,我不确定是什么时候或者是什么原因导致查询停止工作。我不认为代码是问题所在。可能会有一些我不知道的管理任务来清理数据。我已经使用了repair命令,但没有任何运气。
发布于 2012-07-28 06:04:57
我有一些旧的条目,它们的长/后顺序颠倒了。这导致我所有的near查询失败。奇怪的是,有几个相反顺序的long/lat值会导致这种情况。不过,这就是原因所在。当我为相反的条目固定了长/纬度的顺序时,查询又开始工作了。为了找出这一点,我不得不在java中直接构建和使用mongodb命令,而不是使用Spring的简洁方法。通过在调试时查看命令的返回值,我实际上可以看到有关纬度的值不正确的错误消息。使用Spring的near query操作没有返回这样的错误。Spring的错误消息不充分使得这个bug很难被追踪到。
https://stackoverflow.com/questions/11679496
复制相似问题