Объективировать запрос среди встроенного списка ссылок

1

В моем хранилище данных у меня есть почтовая организация, у которой есть отправитель, и у этого отправителя есть список мест. В принципе, это выглядит так:

@Entity
@Cache
@Unindex
@Searchable
public class Post {
    @Index
    @Load(WithSender.class)
    @NonNull @Getter @Setter
    protected Ref<User> sender;


    @Index
    @Getter
    protected long creation;
}

@Entity
@Cache
@Unindex
public class User {

    @Index
    @NotNull
    @Email
    @NonNull
    @Getter
    @Setter
    private String email;

    @Size(max = 50)
    @Getter
    @Setter
    private String firstName;

    @Size(max = 50)
    @Getter
    @Setter
    private String lastName;

    @Index
    @Setter
    @Getter
    protected List<Key<Region>> regions;
}

Я хочу сделать запрос на все сообщения, которые были отправлены пользователем, принадлежащим региону, который находится в списке регионов этого пользователя, и по порядку создания.

В принципе, я пытался это сделать:

query = query.filter("sender.regions", "key").order("-creation");

Когда я выполнил запрос в первый раз, AppEngine попросил создать этот индекс:

<datastore-index kind="Post" ancestor="false" source="manual">
    <property name="sender.regions" direction="asc"/>
    <property name="creation" direction="desc"/>
</datastore-index>

Но результаты остаются безнадежно пустыми... Если у кого есть предложение, я буду рад. Благодаря !

Теги:
google-app-engine
google-cloud-datastore
nosql

2 ответа

3
Лучший ответ

Чтобы запросить сообщение "sender.regions", необходимо вставить объект отправителя.

В хранилище данных нет SQL-подобных "join". Вы либо вставляете отправителя в сообщение, либо запрашиваете ключи Отправителя сначала по регионам, а затем запрашиваете сообщения с этими ключами отправителя.

Надеюсь, поможет.

  • 0
    Благодарю. На самом деле то, что я в итоге сделал - это вставил регион в почту. Я нуждался в этом в нескольких других контекстах, поэтому при создании я копирую Регион отправителя в Посте, так что все мои проблемы закончились! :)
  • 0
    Итак, вы закончили встраивать атрибут, почему этот ответ не был принят?
0

То, что я закончил, - это вставить Регион в Почту. Мне это нужно в нескольких других контекстах, поэтому при создании я копирую Регион отправителя в Почте, таким образом все мои проблемы закончились! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню