Составной индекс MongoDB / Morphia с DBRef

Я не смог найти однозначного ответа и надеюсь, что кто-нибудь может мне помочь. Я хочу создать составной индекс для объекта, на который "ссылаются" в 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.city

Итак, я предполагаю, что мой вопрос: получаю ли я эту ошибку, потому что «Адрес» является ссылкой в ​​«Команде», или мне не хватает чего-то еще?

Спасибо за любой отзыв.


person themanatuf    schedule 21.02.2012    source источник


Ответы (2)


Да вот почему. Поле вашего местоположения ссылается на другую коллекцию, то есть на поле «город» в коллекции «Адрес». У вас есть возможность встроить Address в команду - это сохранит все в коллекции Team и позволит вам добавить ваш индекс "location.city" в класс / коллекцию "Team".

person Nic Cottrell    schedule 29.02.2012

При фильтрации по полям, вложенным внутри ссылки: доступ к полям для списков объектов в классе через morphia в mongodb

При фильтрации только по идентификатору ссылки: .filter ("местоположение", новый ключ (Address.class, id))

person Coding Elements    schedule 13.11.2014