RavenDB:如何修复此 Map Reduce 代码?我在期望结果的地方得到 NULL 值
RavenDB: How do I fix this Map Reduce code? I'm getting NULL values where I'm expecting Results
我有以下代码:
public class WorkOrderByUserId : AbstractMultiMapIndexCreationTask<WorkOrderByUserId.Result>
{
public WorkOrderByUserId()
{
this.AddMap<WorkOrder>(items
=> from item in items
select new Result
{
OwnerId = item.OwnerId,
WorkOrder = new WorkOrderLookupDto
{
Id = item.Id,
Name = item.EventName
},
WorkOrders = null
});
this.AddMap<Invoice>(items
=> from item in items
select new Result
{
OwnerId = item.WorkOrder.OwnerId,
WorkOrder = new WorkOrderLookupDto
{
Id = item.WorkOrder.Id,
Name = item.WorkOrder.EventName
},
WorkOrders = null
});
this.Reduce = results => from result in results
group result by result.OwnerId
into g
select new Result
{
OwnerId = g.Key,
WorkOrders = g.Select(x => x.WorkOrder),
WorkOrder = null
};
this.Indexes.Add(x => x.OwnerId, FieldIndexing.Default);
}
public class Result
{
public string OwnerId { get; set; }
public IEnumerable<WorkOrderLookupDto> WorkOrders { get; set; }
public WorkOrderLookupDto WorkOrder { get; set; }
}
}
它让我非常接近我想去的地方,但我似乎遗漏了一些东西,我正在丢失信息,我不确定为什么。
使用 Map/Reduce 可视化工具,我注意到 MAP 正在显示结果(即填充了 WorkOrders,而 WorkOrder 为空)
至此,我期望有一堆带有 NULL WorkOrders 的项目和一个有效的 WorkOrder,我希望将其减少到 WorkOrders 集合中。
当我在可视化工具中查看最终的 reduce 时,我注意到我的 WorkOrder 为 NULL,而且我的 WorkOrders 完全丢失了。
当我查看索引的最终结果时,我看到了我正在寻找的内容,只是没有我正在寻找的实际数据。
我需要更改什么才能使我的最终工单不为空?
我能够使用以下代码获得我想要的结果:
public class WorkOrderByUserId : AbstractMultiMapIndexCreationTask<WorkOrderByUserId.Result>
{
public WorkOrderByUserId()
{
this.AddMap<WorkOrder>(items
=> from item in items
select new Result
{
OwnerId = item.OwnerId,
WorkOrders = new[]
{
new WorkOrderLookupDto
{
Id = item.Id,
Name = item.EventName
}
}
});
this.AddMap<Invoice>(items
=> from item in items
select new Result
{
OwnerId = item.WorkOrder.OwnerId,
WorkOrders = new[]
{
new WorkOrderLookupDto
{
Id = item.WorkOrder.Id,
Name = item.WorkOrder.EventName
}
}
});
this.Reduce = results => from result in results
group result by result.OwnerId
into g
select new Result
{
OwnerId = g.Key,
WorkOrders = g.SelectMany(x => x.WorkOrders)
};
this.Indexes.Add(x => x.OwnerId, FieldIndexing.Default);
}
public class Result
{
public string OwnerId { get; set; }
public IEnumerable<WorkOrderLookupDto> WorkOrders { get; set; }
}
}
我有以下代码:
public class WorkOrderByUserId : AbstractMultiMapIndexCreationTask<WorkOrderByUserId.Result>
{
public WorkOrderByUserId()
{
this.AddMap<WorkOrder>(items
=> from item in items
select new Result
{
OwnerId = item.OwnerId,
WorkOrder = new WorkOrderLookupDto
{
Id = item.Id,
Name = item.EventName
},
WorkOrders = null
});
this.AddMap<Invoice>(items
=> from item in items
select new Result
{
OwnerId = item.WorkOrder.OwnerId,
WorkOrder = new WorkOrderLookupDto
{
Id = item.WorkOrder.Id,
Name = item.WorkOrder.EventName
},
WorkOrders = null
});
this.Reduce = results => from result in results
group result by result.OwnerId
into g
select new Result
{
OwnerId = g.Key,
WorkOrders = g.Select(x => x.WorkOrder),
WorkOrder = null
};
this.Indexes.Add(x => x.OwnerId, FieldIndexing.Default);
}
public class Result
{
public string OwnerId { get; set; }
public IEnumerable<WorkOrderLookupDto> WorkOrders { get; set; }
public WorkOrderLookupDto WorkOrder { get; set; }
}
}
它让我非常接近我想去的地方,但我似乎遗漏了一些东西,我正在丢失信息,我不确定为什么。
使用 Map/Reduce 可视化工具,我注意到 MAP 正在显示结果(即填充了 WorkOrders,而 WorkOrder 为空)
至此,我期望有一堆带有 NULL WorkOrders 的项目和一个有效的 WorkOrder,我希望将其减少到 WorkOrders 集合中。
当我在可视化工具中查看最终的 reduce 时,我注意到我的 WorkOrder 为 NULL,而且我的 WorkOrders 完全丢失了。
当我查看索引的最终结果时,我看到了我正在寻找的内容,只是没有我正在寻找的实际数据。
我需要更改什么才能使我的最终工单不为空?
我能够使用以下代码获得我想要的结果:
public class WorkOrderByUserId : AbstractMultiMapIndexCreationTask<WorkOrderByUserId.Result>
{
public WorkOrderByUserId()
{
this.AddMap<WorkOrder>(items
=> from item in items
select new Result
{
OwnerId = item.OwnerId,
WorkOrders = new[]
{
new WorkOrderLookupDto
{
Id = item.Id,
Name = item.EventName
}
}
});
this.AddMap<Invoice>(items
=> from item in items
select new Result
{
OwnerId = item.WorkOrder.OwnerId,
WorkOrders = new[]
{
new WorkOrderLookupDto
{
Id = item.WorkOrder.Id,
Name = item.WorkOrder.EventName
}
}
});
this.Reduce = results => from result in results
group result by result.OwnerId
into g
select new Result
{
OwnerId = g.Key,
WorkOrders = g.SelectMany(x => x.WorkOrders)
};
this.Indexes.Add(x => x.OwnerId, FieldIndexing.Default);
}
public class Result
{
public string OwnerId { get; set; }
public IEnumerable<WorkOrderLookupDto> WorkOrders { get; set; }
}
}