0

私は決定的な答えを見つけることができませんでした、そして誰かが私を助けてくれることを願っています。Mongo内で「参照」されるオブジェクトに複合インデックスを作成したいと思います。明らかにエラーが発生しています。これについては、コードスニペットの下で説明します。

@Entity
public class Address {
    public Address (String street, String City, String state, String zip) {
        this.street = street;
        this.city   = city;
        this.state  = state;
        this.zip    = zip;
    }

    // Getters and Setters

    @Id private ObjectId id;
    private String street;
    private String city;
    private String state;
    private String zip;
}

@Entity
@Indexes( @Index("location.city, name") )
public class Team {
    public Team (String sport, String name, Address location) {
        this.sport    = sport;
        this.name     = name;
        this.location = location;
    }

    // Getters and Setters

    @Id private ObjectId id;
    private String sport;
    private String name;
    @Reference private Address location;
    @Reference private List<Player> players;
}

そして、私が得ているエラーは次のとおりです。

スレッド「main」の例外com.google.code.morphia.query.ValidationException:検証中に「com.company.test.Team」で「location」を過ぎたドット表記を使用できませんでした--location.city

だから私の質問は、「アドレス」が「チーム」内の参照であるためにこのエラーが発生するのか、それとも何か他のものが欠落しているのかということだと思います。

フィードバックをありがとうございます。

4

2 に答える 2

0

はい、そういうわけです。場所フィールドが別のコレクションを参照しています。つまり、「住所」コレクションの「都市」フィールドです。チーム内に住所を埋め込むオプションがあります。これにより、すべてがチームコレクションに保存され、「location.city」インデックスを「チーム」クラス/コレクションに追加できるようになります。

于 2012-02-29T17:50:49.263 に答える
0

参照内にネストされたフィールドでフィルタリングする場合: mongodbのmorphiaを介したクラス内のオブジェクトのリストへのフィールドアクセス

参照IDのみでフィルタリングする場合:.filter( "location"、new Key(Address.class、id))

于 2014-11-13T16:17:29.173 に答える