Хранилище данных Spring, поиск по внутреннему объектному полю

#spring #mongodb #spring-data-mongodb

#spring #mongodb #spring-data-mongodb

Вопрос:

Я разрабатываю простую социальную сеть, и мне нужна помощь с запросом mongorepository. У меня есть 2 документа:

 @Document(collection = "post")
public class Post {
    ...........
    @DBRef
    @Field("settings")
    private Settings settings;
  

и

 @Document(collection = "settings")
public class Settings {
    ..............
    @Field("privacy_settings")
    private PrivacySettings privacySettings;
}
  

PrivacySettings — это перечисление с настройками ONLY_ME, EVERYBODY, FRIENDS.

И ситуация такова: друг просматривает мою страницу, и он может видеть мои сообщения с правильными настройками конфиденциальности (и т.д. Он может Видеть только сообщения с настройками конфиденциальности: ВСЕ, ДРУЗЬЯ, но не ONLY_ME). Идеи, как решить эту проблему? Как создать правильный запрос?

Ответ №1:

Решение 1
В Mongo вы не можете использовать query все DbRef поля, кроме Id, поскольку в этом не join поддерживается. Поскольку read operation оно очень велико, я порекомендую вам использовать embed часть Setting документа в Post вместо ссылки на него. Как подсказывает дизайн mongo DB, если read > write вам нужен embed документ. В этом случае запрос будет простым.

Решение 2
Вы можете запустить два запроса к БД, сначала при настройке документа, чтобы получить Setting с EVERYONE, FRIENDS помощью запроса make в документе Post, чтобы получить всю запись с помощью in запроса Setting.

Решение 3
Вы можете легко использовать QueryDSL для запроса к объекту DBRef для справки смотрите это.

Комментарии:

1. Спасибо вам за ваш ответ. Я использовал Решение2