Как сохранять в MongoDB поле с тремя возможными значениями: разрешён / запрещён / не установлен?

Хранится дерево – неограниченная иерархия компаний и сотрудников.
Необходимо добавить отдельным веткам некий признак, который может быть:
  1. не установлен — наследуется из узлов выше;
  2. разрешён явно;
  3. запрещён явно.

Дерево описано массивом «предков» — у каждого узла есть свойство, составляющее «путь» к нему. Это существующий проект.

Для узла понадобится узнавать значение этого свойства — смотреть, установлено ли оно в нём самом, или идти выше по предкам, пока не найдётся явно установленное значение.

С Mongo опыт минимальный, поэтому пока не знаю, как лучше это реализовать. Пока два варианта вижу:
  • два булевых поля: явное разрешение и явный запрет. Тут плохо, что 2 бита кодируют 4 состояния, а нам нужны только 3. Четвертое — потенциальная ошибка (оба включены).
  • одно поле, скажем, int, где 1 значит разрешено, 2 запрещено, а 0, отсутствие поля или null – «не установлено, ищите в предках».


upd. В основанном на частных мнениях гайде, смотрю, пишут, что лучше хранить как строковые константы:
"ALLOWED", "DENIED", "NOT_APPLICABLE"
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
nullable bool полностью покроет варианты
ну и всякие ifnull для полного счастья
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы