2

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コマンドを使用しました。

4

1 に答える 1

3

長い/遅い順序が逆になっている古いエントリがいくつかありました。これにより、私のニアクエリはすべて失敗しました。いくつかの経度/緯度の値を逆の順序で使用すると、これが発生するのは奇妙です。それでも、それが原因です。エントリの長い/緯度の順序を逆に修正すると、クエリが再び機能するようになりました。これを見つけるには、Spring の簡潔なアプローチを使用するのではなく、Java で直接 mongodb コマンドを作成して使用する必要がありました。デバッグ中にコマンドの戻り値を確認すると、緯度の値が正しくないというエラー メッセージを実際に確認できました。Spring のニアクエリ操作を使用しても、そのようなエラーは返されませんでした。Spring の不適切なエラー メッセージにより、このバグの追跡が非常に困難になりました。

于 2012-07-27T22:04:57.470 に答える