Как получить все встроенные документы mongoid для пользователя
В Mongoid (Rails) у меня есть 3 модели: Файл, Версия и Пользователь. Версия - это встроенный файл, и файл, и версия принадлежат пользователю (хотя не обязательно одинаковы для всех версийфайла).
Теперь я хочу получить все версии, которые принадлежат конкретному пользователю или встроены в файл, принадлежащий тому же пользователю.
Я пытался:
- Почти все
Version.<something>
, всегда 0 результатов (вероятно, потому что Версия не является документом верхнего уровня?) File.any_of(user: user, 'versions.user': user)
: NoMethodError: неопределенный метод `bson_type'для #<пользователя: 0x00000007cd9400>File.any_of(user: user, 'versions.user_id': user.id)
: Возвращает только те файлы, которые принадлежат пользователю, но не файлы, в которые встроены версии, принадлежащие пользователю.
Как это может быть достигнуто дружественным для базы данных способом (не выбирая все файлы и не просматривая их версии)?
1 ответ
Когда вы говорите "Embedded", это означает, что встроенная модель (версия) больше не является отдельной сущностью и не имеет отдельной коллекции. Он включен как часть документа (объект модели файла).
Сбор не подразумевает -> Pt 1 вернет ноль
Pt2 Это также означает, что отношения между пользователем и версией не существует.
В Pt3 запрос 'versions.user_id' просто игнорируется.
Re: "Как это может быть достигнуто дружественным способом для базы данных?"
Внедренные документы используются только тогда, когда они никогда не предназначены для самостоятельного использования или не имеют смысла без контекста родительского документа. Таким образом, единственный способ получить доступ к встроенному документу - через родительский документ.
Поскольку версия здесь используется и File, и User, вам следует рассмотреть возможность создания для нее отдельной коллекции. (Нормализованные модели данных)
Вы можете прочитать больше о моделировании данных mongodb здесь