Я относительно новичок в MongoDB и все еще привыкаю к дизайну схемы.
В проекте, над которым я сейчас работаю, пользователи могут отмечать файлы, которые они загружают.Существует три типа тегов: описательный, бренд и store_department.Они представляются пользователю в виде трех полей, но в действительности они объединяются и сохраняются в виде тегов, а именно:
"tags" : [
{
"type" : "descriptive",
"tag" : "this is my tag"
},
{
"type" : "brand",
"tag" : "this is another tag"
}
]
Это облегчает поиск.Используя тип, я могу представить пользователю три различных поля, чтобы побудить их предоставить информацию, а затем разрешить более сложные запросы, такие как поиск по бренду или отделу магазина.Поиск по умолчанию будет просто искать соответствующие теги.
Проблема в том, что я предоставляю функцию автозаполнения во всех полях.Когда пользователь вводит в поле «бренд», отображаются все созданные теги типа «бренд», которые соответствуют его вводу.Это легко сделать, если у вас есть отдельная коллекция тегов.Новые документы тегов создаются и обновляются при сохранении файла документа.Автозаполнение запросов к автономной коллекции тегов вместо встроенных тегов для производительности.
Что-то не так с этим дизайном.В некотором отношении это дублирование усилий, но, похоже, оно отлично работает с точки зрения взаимодействия с пользователем.Я использую Mongoid, и для размещения этого дизайна пришлось создать две модели для моих коллекций тегов.Тот, который определяет два атрибута, и второй, который наследуется от первого, но добавляет макрос внедренный.
Я мог бы видеть, что этот шаблон полезен и в других случаях: товары и корзины покупок, товары и заказы на покупку и т. Д.. Есть ли лучший способ?