3

プロパティがmongodbに永続化されるときに、プロパティの順序を強制する必要があるLocationオブジェクトがありますが、それを行う方法を理解するのにあまり運がありません。Locationクラスは次のようになります。

Location {
   float lat;
   float lon;
   County county;
}

それがmongoに固執するとき、郡は常にlatとlonの前にあります。ジオインデックスを設定しようとしているため、これは問題です。最初の2つのプロパティは緯度/経度である必要があります。

私が試してみました:

@XmlRootElement(name="location")
@XmlType(propOrder={"latitude", "longitude", "county"})
Location {
   float lat;
   float lon;
   County county;
}

これは、ロケーションオブジェクトがクライアントに対してxmlにシリアル化されている場合は機能しますが、DBに対しては機能しません。春のデータや一部のモンゴマッパーは常にアルファベット順に物事を行っているようです。

注文プロパティを強制的にmongoに永続化する方法を知っている人はいますか?ありがとう!

4

4 に答える 4

7

@Fieldアノテーションのorder属性を使用して、フィールドの順序を強制できます。だから、あなたが持っているなら:

Location {
   @Field(order = 1)
   float lat;

   @Field(order = 2)
   float lon;

   @Field(order = 3)
   County county;
}

フィールドは、lat、lon、countyの順序で永続化されます。

于 2012-10-04T11:54:07.190 に答える
1

誰もが知っているように、私はSpring開発者と話していましたが、現時点ではこれを行う方法がないため、この問題についてJIRAを提出するように依頼されました。JIRAはここで見つけることができます: https ://jira.springsource.org/browse/DATADOC-172

于 2011-06-11T04:06:32.717 に答える
0

POJOからMongoDBへの変換に何を使用しているかは不明です。Morphia(http://code.google.com/p/morphia)のようなマッパーは、クラスで宣言されているフィールドの順序を使用します。これをさまざまな方法で制御するオプションもあります。

これがSpringData(フレームワーク)の問題である場合は、サポートのためにフォーラムにアクセスすることをお勧めします。

于 2011-06-09T14:36:41.790 に答える
0

完全を期すために、最終的にlat / longを含むPointオブジェクトを作成し、そのオブジェクトにインデックスを付けました。そうすれば、それがオブジェクト内の唯一のものであり、順序は重要ではありませんでした。

関連するメモとして、今日、空間クエリを実行する場合は、プロパティを経度、緯度の順序で保存する必要があることを学びました。詳細についてはこちらをご覧くださいが、今日はしばらくの間、壁に頭をぶつけたので、地理クエリ用のポイントを保存する場合は、正しい順序で配置されていることを確認してください。これはすべて、クラスで経度を最初に置くことを意味します。@Field属性で注釈を付けることもできると思います。

于 2013-01-23T21:30:44.967 に答える