使用DBRef的MongoDB / Morphia复合索引

时间:2012-02-21 18:59:58

标签: java mongodb morphia

我无法找到明确的答案,我希望有人可以帮助我。我想在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'中找到过去'位置'的点符号。城市

所以我想我的问题是:我收到此错误是因为“地址”是“团队”中的引用还是我错过了其他内容?

感谢您的反馈。

2 个答案:

答案 0 :(得分:0)

是的,这就是原因。您的位置字段引用了不同的集合 - 即“地址”集合中的“城市”字段。您可以选择在团队中嵌入Address - 这将保存Team集合中的所有内容,并允许您将“location.city”索引添加到“Team”类/集合中。

答案 1 :(得分:0)

如果按照嵌套在引用内的字段进行过滤: field access for lists of objects in a class via morphia in mongodb

如果仅按引用ID过滤:.filter(“location”,new Key(Address.class,id))