#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