Возникли проблемы с RavenDB Multi Map - PullRequest
2 голосов
/ 05 марта 2012

Я новичок в Рейвен, поэтому я даже не уверен, правильно ли я здесь подхожу. Мне нужно создать список элементов, свойства которых извлекаются из отдельных документов ... по сути, JOIN.

Скажите, у меня есть следующие объекты:

public class Merchant
{
   public string Id {get;set;}
   public string MerchantName {get;set;}
}

public class Location
{
   public string Id {get;set;}
   public string MerchantId {get;set;}
   public string City {get;set;}
}

public class Item
{
   public string Id {get;set;}
   public string MerchantId {get;set;}
   public string ItemName {get;set;}
}

И мне нужно преобразовать MapReduce (я думаю) в список MerchantItem

public class MerchantItem
{
   public string ItemId {get;set;}
   public string MerchantId {get;set;{
   public string LocationId {get;set;}
   public string ItemName {get;set;}
   public string City {get;set;}
   public string MerchantName {get;set;}
}

Вот моя (нерабочая) мультикарта уменьшения:

AddMap<Merchant>(merchants => from m in merchants
                              select new
                              {
                               ItemId = (string)null,
                               MerchantId = m.Id,
                               LocationId = (string)null,
                               ItemName = (string)null,
                               City = (string)null,
                               MerchantName = m.Name
                              });

AddMap<Location>(locations => from l in locations
                              select new
                              {
                               ItemId = (string)null,
                               MerchantId = l.MerchantId,
                               LocationId = l.Id,
                               ItemName = (string)null,
                               City = l.City,
                               MerchantName = (string)null
                              });

AddMap<Item>(items=> from i in items
                              select new
                              {
                               ItemId = i.Id,
                               MerchantId = i.MerchantId,
                               LocationId = (string)null,
                               ItemName = i.ItemName,
                               City = (string)null,
                               MerchantName = (string)null
                              });

Reduce = results => from r in results
                    group result by r.LocationId
                    into g
                    select new
                    {
                     ItemId = g.Select(x => x.ItemId),
                     MerchantId = g.Select(x => x.MerchantId),
                     LocationId =  g.Key,
                     ItemName = g.Select(x => x.ItemName ).Where(x => x != null).FirstOrDefault(),
                     City =  g.Select(x => x.City ).Where(x => x != null).FirstOrDefault(),
                     MerchantName = g.Select(x => x.MerchantName ).Where(x => x != null).FirstOrDefault()
                     });

Идея в том, что мне нужен MerchantItem для каждого предмета и местоположения в базе данных. В SQL мы просто говорим о паре объединений, но я совершенно туп на том, как это сделать в Raven.

1 Ответ

0 голосов
/ 05 марта 2012

Райан,

Вы можете достаточно легко получить предметы и связанного с ними продавца (используя Include). Но твой индекс не имеет смысла.

Что вы пытаетесь сделать?

...