Позже, чем я ожидал, но вот что мы реализуем сейчас ...
Справочная информация: Предполагается, что наша система способна импортировать товарные запасы с нескольких сайтов электронной торговли, поэтому гибкость и i18n важны.
EAV модель:
db.products.find()
{ "_id" : ObjectId("4e9bfb4b4403871c0f080000"),
"name" : "some internal name",
"sku" : "10001",
"company" : { /* reference to another collection */ }, "price" : 99.99,
"attributes": {
"description": { "en": "english desc", "de": "deutsche Beschreibung" },
"another_field": { "en": "something", "de": "etwas"},
"non_i18n_field": { "*": xxx }
}
}
Нам также нужны метаданные для атрибутов, которые включают советы по редактированию администратора (какие формы ввода использовать) и i18n для имен атрибутов,Пример:
db.eav.attributes.find()
{ "_id" : ObjectId("127312318"),
"code" : "description",
"labels" : { "en" : "Description", "de": "Beschreibung" },
"type" : "text-long",
"options" : [],
"constraints" : [ ]
}
Идея состоит в том, что метаданные атрибута будут довольно большими и не будут скопированы.Большинство операций времени будут выполняться с использованием значений (динамических) атрибутов.Если метаданные атрибута необходимы для отображения пользовательского интерфейса и т. Д., Они могут загружаться и кэшироваться отдельно, и на них может ссылаться код атрибута.
Таким образом, по умолчанию все, что является атрибутом, поддерживает i18n.
Запросы для атрибутов i18n-enabled:
db.products.find ({attribute.description.en: "search val"})
Непереведенные атрибуты могут быть хлопотными, поскольку они требуют особой обработки в запросах:
attribute.description. *
Не уверен, что мы будем делать с этими атрибутами еще.Например, числовые значения не требуют перевода.Любые мысли по этому поводу приветствуются.
Мы все еще не используем эту структуру, так что это действительно идеи перед внедрением.Я ожидаю появления новых проблем, пока мы начнем использовать это на практике, т. Е. Делать пользовательский интерфейс для операций CRUD и т. Д.