스프링 데이터의 니어 쿼리 작업을 사용하여 수행하는 쿼리가 비슷합니다. 모든 것이 대부분 잘 작동합니다. 그러나, 나는 여러 테스트 기계와 생산 기계에 관한 코드를 가지고있다. 쿼리는 일부 테스트 시스템에서 작동하지만 프로덕션 시스템 및 테스트 시스템 중 하나에서 새로 생성 된 개체에 대한 결과를 반환하지 않습니다. mongodb 컬렉션을 작동하지 않는 컴퓨터에 놓은 다음 동일한 코드를 사용하여 새 문서를 삽입하고 컬렉션을 다시 만들면 쿼리가 다시 작동하기 시작합니다. 내 질문은; 무엇이 이런 유형의 행동을 일으킬 수 있습니까? 클래스에 새로운 변수를 추가하면 쿼리 근처의 mongodb가 실행을 멈출 수 있습니까? 이미 존재하는 것과 다른 변수를 가진 컬렉션에 문서가 추가되면 문제가 발생할 수 있습니까? 프로덕션 환경에서이 문제를 해결하기 위해 컬렉션을 삭제할 수는 없습니다. 내 mongodb 코드가 계속 작동 할 수 있도록 mongodb 콜렉션의 데이터를 일관성있게 유지하는 것에 대해 빠진 것이 있습니까?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"}
코드는 다르게이 실행되는 시스템에 따라 작동합니다. 내 항아리 파일 등이 각 기계에서 동일하다는 것을 확인했습니다. 쿼리가 실패하기 시작하면 쿼리가 작동하도록 만드는 유일한 방법은 컬렉션을 삭제하고 다시 시작하는 것입니다. 그러나 언제 또는 무엇이 쿼리가 작동을 멈추게하는지 확신하지 못합니다. 나는 그 코드가 문제라고 생각하지 않는다. 데이터 정리에 대해 모르는 관리 작업이있을 수 있습니다. 나는 행운없이 수리 명령을 이미 사용했다.
안전하게 쓰고 있습니까? 새 문서에 대한 쿼리를 시작할 때 삽입이 완료되지 않았습니까? –
나는 그렇지 않습니다. 인서트가 완료되었습니다. 전체 컬렉션을 삭제하고 서버를 시작하고 새 문서를 삽입하면 방금 삽입 한 문서에서 다시 쿼리가 시작됩니다. 쿼리는 일정 시간 동안 존재했던 콜렉션을 삭제하기 전에 삽입되고 커밋 된 문서에서는 작동하지 않습니다. 이러한 컬렉션은 컬렉션의 문서에 추가되는 필드를 포함하여 코드에 대한 몇 가지 업데이트를 거쳤습니다. –
더 많은 정보 없이는 아무도 무슨 일이 일어날 지 짐작할 수 없습니다. 반환해야하는 반환되지 않은 문서의 예제 나 실행중인 쿼리 등을 게시 할 수 있습니까? –