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

Нека си представим документ с локализации като този:

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

и искам да получа от Raven проектирани/сплескани/филтрирани резултати, които изглеждат така, ако направя заявка за индекс CategoryId:"categories/1" И Lang:"en":

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

така че основно документът съдържа локализирани низове в масив и искам да получа само един език. Филтрирането на клиент не е проблем, но как да го направя на сървър на raven, с Transformer?

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


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


Отговори (1)


Ако единствената разлика между продуктите е преводът, бих избрал различен модел. Продуктовият документ ще има categoryId, цена и цялата останала информация за продукта.

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

person synhershko    schedule 10.08.2013
comment
хм, звучи интересно! Как би изглеждал моделът c#? Опитвам се да имам Product като обобщен корен и преводи като стойностни обекти вътре в него. Това постижимо ли е? - person Hrvoje Hudo; 11.08.2013