我在此类的 RavenDB 中有一个集合...
public class Report
{
public string User { get; set; }
public int Quarter { get; set; }
public int Year { get; set; }
public string ReportData { get; set; }
}
每个用户每年每个季度只有一份报告(因此识别键是{ User, Quarter, Year }
。我想创建一个函数来保存这些报告的列表,根据需要覆盖旧报告或插入新报告。我想出了这个:
public void Save(IList<Report> reports)
{
session.Query<Report>()
.Join(reports,
x => new { x.User, x.Quarter, x.Year },
y => new { y.User, y.Quarter, y.Year },
(x, y) => new { OldReport = x, NewReport = y })
.ForEach(report =>
{
if (report.OldReport != null)
report.OldReport.InjectFrom(report.NewReport);
else
session.Store(report.NewReport);
});
session.SaveChanges();
}
但是,RavenDB 不支持该.Join
运算符。 编辑:我刚刚意识到这也需要一个右外连接才能工作,但我认为它传达了我的意图。 我知道我需要做一些 Map Reduce 来实现这一点,但我是 RavenDB 的新手,我找不到任何与我正在做的事情相关的好例子。有没有人尝试过这样的事情?
PS 该.InjectFrom()
操作正在使用Omu.ValueInjecter
,如果有人想知道的话。