Spring Data の NearQuery 操作を使用して実行するニアクエリがあります。ほとんどの場合、すべてが正常に機能します。ただし、いくつかのテスト マシンと実稼働マシンにコードがあります。クエリは一部のテスト マシンで機能しますが、運用マシンとテスト マシンの 1 つで新しく作成されたオブジェクトの結果が返されません。動作しないマシンに mongodb コレクションをドロップし、同じコードを使用して新しいドキュメントを挿入し、コレクションを再作成すると、クエリが再び動作し始めます。私の質問は; この種の動作の原因は何ですか? クラスに新しい変数を追加すると、mongodb Near クエリの実行が停止する可能性がありますか? すでに存在するものとは異なる変数を持つコレクションに追加されたドキュメントがある場合、問題が発生する可能性がありますか? 本番環境では、コレクションを削除してこれを修正することはできません。
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コマンドを使用しました。