Загрузить только часть элемента массива документов Ravendb

Представим себе документ с такими локализациями:

{  
    "Id":"product/1",  
    "CategoryId":"categories/1",  
    "Translations":[  
        { "Lang": "en", "Title:"en title"},  
        { "Lang": "hr", "Title:"hr title"}
    ]
} 

и я хочу получить от Raven спроецированные/сглаженные/отфильтрованные результаты, которые выглядят так, если я запрошу индекс CategoryId:"categories/1" AND Lang:"en":

{  
    "Id":"product/1",
    "CategoryId":"categories/1",  
    "Lang":"en",  
    "Title":"en title"
}

так что в основном документ содержит локализованные строки в массиве, и я хочу получить только один язык. Фильтровать на клиенте не проблема, но как это сделать на сервере ворона с Transformer?

Или вы можете предложить другую структуру документа для хранения локализованного контента? В настоящее время у меня есть отдельные документы Product и ProductTranslation (для каждого языка), но хотелось бы, чтобы все это было в одном документе (выглядит больше OO:/)


person Hrvoje Hudo    schedule 10.08.2013    source источник


Ответы (1)


Если бы единственная разница между продуктами заключалась в переводе, я бы выбрал другую модель. Документ продукта будет иметь идентификатор категории, цену и всю остальную информацию о продукте.

Предполагая, что продукт сохранен под products/1, вы можете сохранить дополнительные документы под такими идентификаторами, как products/1/en, products/1/es и т. д., и сохранить там переведенные строки. Затем вы можете использовать ResultTransformers для вставки переведенных строк в конечный результат запросов.

person synhershko    schedule 10.08.2013
comment
хм, звучит интересно! Как будет выглядеть модель С#? Я пытаюсь использовать Product как совокупный корень, а переводы как объекты-значения внутри него. Это достижимо? - person Hrvoje Hudo; 11.08.2013