RavenDB: Как создать индекс MapReduce для возврата отфильтрованного списка дочерних объектов - PullRequest
1 голос
/ 27 февраля 2012

После этого вопроса

У меня следующая структура документа:

Game 
 - Id
 - Teams
   - Team 1
     - list of players
   - Team 2 
     - list of players
 - Events
   - Event 1
     - type: Pass
     - teamId
     - PlayerId
   - Event 2
     - type: Goal
     - teamId
     - PlayerId

Как мне создать индекс, который дает мне все события для игрока заданная игра?

Вот как далеко я зашел, и RavenDB говорит, что не может понять мой запрос?

public class Games_PlayerEvents : AbstractIndexCreationTask<Game, Games_PlayerEvents.ReduceResult>
    {
        public class ReduceResult
        {
            public string PlayerId { get; set; }
            public IEnumerable<GameEvent> Events { get; set; }
        }


        public Games_PlayerEvents()
        {
            Map = games => from game in games
                           select new
                           {
                               PlayerId = "",
                               Events = game.Events
                           };

            Reduce = results => from result in results
                                from @event in result.Events
                                group @event by @event.PlayerId into playerEvents
                                select new
                                {
                                    PlayerId = playerEvents.Key,
                                    Events = playerEvents.Select(g => g)
                                };


        }
    }

1 Ответ

3 голосов
/ 27 февраля 2012

Марто, если вы действительно хотите смоделировать его таким образом, вам не нужно создавать индекс, так как вы можете загрузить весь игровой документ и сделать все остальное, используя стандартный linq-to- агрегация объектов.

В любом случае, звучит так, как будто вы хотите, чтобы игра, игрок и событие были независимыми документами, так как это ваши общие корни или, другими словами, они сами по себе имеют значение.

...