public void Save(AppUsageDurationSummary entity)
{
try
{
IMongoQuery query = Query.And
(
Query<AppUsageSummary>.EQ<DateTime>(mem => mem.Date, entity.Date),
Query<AppUsageSummary>.EQ<Guid>(mem => mem.ApplicationId, entity.ApplicationId),
Query<AppUsageSummary>.EQ<string>(mem => mem.Version, entity.Version),
Query<AppUsageSummary>.EQ<PlatformType>(mem => mem.PlatformId, entity.PlatformId)
);
IMongoUpdate update = Update<AppUsageDurationSummary>
.SetOnInsert(x => x.Version, entity.Version)
.SetOnInsert(x => x.Date, entity.Date)
.SetOnInsert(x => x.ApplicationId, entity.ApplicationId)
.SetOnInsert(x => x.PlatformId, entity.PlatformId)
//len
.Inc(mem => mem.LengthGroup._10sec, entity.LengthGroup._10sec)
.Inc(mem => mem.LengthGroup._20sec, entity.LengthGroup._20sec)
.Inc(mem => mem.LengthGroup._30sec, entity.LengthGroup._30sec)
.Inc(mem => mem.LengthGroup._1min, entity.LengthGroup._1min)
.Inc(mem => mem.LengthGroup._2min, entity.LengthGroup._2min)
.Inc(mem => mem.LengthGroup._4min, entity.LengthGroup._4min)
.Inc(mem => mem.LengthGroup._8min, entity.LengthGroup._8min)
.Inc(mem => mem.LengthGroup._16min, entity.LengthGroup._16min)
.Inc(mem => mem.LengthGroup._32min, entity.LengthGroup._32min)
.Inc(mem => mem.LengthGroup._1hr, entity.LengthGroup._1hr)
.Inc(mem => mem.LengthGroup.Over1hr, entity.LengthGroup.Over1hr)
.Inc(mem => mem.Count, entity.Count);
this.GetCollection<AppUsageDurationSummary>().FindAndModify(query, SortBy.Descending("Date"), update, false, true);
this.GetCollection<AppUsageDurationSummary>().EnsureIndex(IndexKeys.Descending("Date"));
}
catch (Exception ex)
{
throw new DataAccessLayerException(ex);
}
}