mam 2 różne typy obiektów przechowywanych w RavenDb, które mają związek macierzysty/typ dziecka, tak w JSON:Mapa zmniejszyć w ciągu 2 RavenDb zbiorów z kolekcji dziecięcej
Account/1
{
"Name": "Acc1",
}
Items/1
{
"Account": "Account/1",
"Value" : "100",
"Tags": [
"tag1",
"tag2"]
}
Items/2
{
"Account": "Account/1",
"Value" : "50",
"Tags": [
"tag2"]
}
Zauważ, że ja nie wiem chcesz je przechowywać w tym samym dokumencie, ponieważ konto może mieć tysiące pozycji.
Próbuję napisać mapę/zmniejszenia indeks, który zwróci mi coś takiego:
{
"Account": "Acc1",
"TagInfo": [
{ "TagName" : "tag1",
"Count" : "1", //Count of all the "tag1" occurrences for acc1
"Value" : "100" //Sum of all the Values for acc1 which are tagged 'tag1'
},
{ "TagName" : "tag2",
"Count" : "2", //Two items are tagged "tag2"
"Value" : "150"
}]
}
tj listę wszystkich odrębnych nazw znaczników wraz z liczbą wszystkich i ich wartości.
Wydaje mi się, że potrzebuję wielu map, aby odwzorować razem kolekcje Konta i Przedmiotów, ale nie mogę wymyślić części zmniejszonej, aby utworzyć część wyniku "TagInfo".
Czy to możliwe, czy też modeluję to wszystko w Kruczym?
EDIT:
Klasa Chcę odzyskać od tego zapytania będzie wyglądać mniej więcej tak:
public class QueryResult
{
public string AccountId {get;set;}
public TagInfo Tags {get;set;}
}
public class TagInfo
{
public string TagName {get;set;}
public int Count {get;set;}
public int TotalSum {get;set;}
}
Dzięki Daniel, nie wiedziałem o 'TransformResults'! Nie jest to jednak dokładnie to, co chciałem, byłem po jednym wyniku na konto, z właściwością zawierającą szczegóły tagu, zobacz moją edycję.Ponadto powyższy parametr TotalSum nie działa, ponieważ sumuje WSZYSTKIE wartości elementów, a nie tylko te dla konta, którego szukam (myślę, że redukcja musi grupować się na koncie zamiast tagu?) – Simon
Nie możesz mieć indeks zawierający klasę zagnieżdżoną w jej wyniku. Nie sądzę, że możesz dostać to, czego chcesz w jednym indeksie. Zamiast tego wolałbym mieć kilka niezależnych indeksów i zapytać je wszystkie, aby uzyskać wszystkie potrzebne informacje lub zmienić model danych, aby lepiej pasował do tego modelu dostępu do danych. –
Ok, dzięki Daniel. Myślałem, że tak być może, ale nie byłam zbyt pewna. Wielkie dzięki za twój czas. – Simon