MongoDB / составной индекс Morphia с DBRef - PullRequest
0 голосов
/ 21 февраля 2012

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 ноября 2014

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

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

0 голосов
/ 29 февраля 2012

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

...