乌鸦DB:如何创建"按日期" UniqueVisitorCount;指数 [英] Raven DB: How to create "UniqueVisitorCount by date" index
问题描述
我有一个应用程序来跟踪一个网站的页面访问。
这里是我的模型:
<预类=郎-CS prettyprint-覆盖>
公共类VisitSession {
公共字符串的SessionID {搞定;组; }
公共DateTime的开始时间{搞定;组; }
公共字符串UniqueVisitorId {搞定;组; }
公众的IList< PageVisit> PageVisits {搞定;组; }
}
当访问者去的网站,访问会话启动。一次访问会话有很多页面访问。跟踪器会写UniqueVisitorId(GUID)饼干时候,第一时间访问者进入网站。所以,我们可以知道,如果一个访问者回访者。
现在,我想知道有多少独立访问者在访问网站日期范围。这就是说,我想在我们的网页这样显示一个表格;
日期|唯一访问者数
------------ + ------------
2012-05 -01 | 100
2012-05-02 | 1000
2012-05-03 | 120
我想创建一个索引RavenDB做到这一点。但我不知道怎么写的Map / Reduce查询。我虽然也可以是这样的:
<预类=郎-CS prettyprint-覆盖>
公共类UniqueVisitor_ByDate:AbstractIndexCreationTask< VisitSession,UniqueVisitorByDate>
{
公共UniqueVisitor_ByDate()
{
=地图会议= GT;从s会话中
选择新的
{
s.StartTime.Date,
s.UniqueVisitorId
};
=减少的结果=>从结果由result.Date结果
组的结果为G
选择新的
{
日期= g.Key,
UniqueVisitorCount = g.Distinct()
};
}
}
但它不工作。在Ayende的电子书,我知道Map函数的结果应该是一样的Reduce函数的结果。 ?所以,我怎么能写正确的map / reduce功能
这个指标应该做你想要什么:
公共类UniqueVisitor_ByDate:AbstractIndexCreationTask< VisitSession,UniqueVisitorByDate>
{
公共UniqueVisitor_ByDate()
{
=地图会议= GT;从s会话中
选择新的
{
s.StartTime.Date,
s.UniqueVisitorId,
计数= 1,
};
=减少的结果=>从结果由result.Date
为G
结果
组的结果选择新UniqueVisitorByDate
{
日期= g.Key,
计数= G。选择(X => x.UniqueVisitorId).Distinct()COUNT(),
UniqueVisitorId = g.FirstOrDefault()UniqueVisitorId,
}。
}
}
请注意,它需要额外的UniqueVisitorId属性在减少,并在地图中的计数属性,但你可以忽略这些。
I have an application to track the page visits for a website. Here's my model:
public class VisitSession {
public string SessionId { get; set; }
public DateTime StartTime { get; set; }
public string UniqueVisitorId { get; set; }
public IList<PageVisit> PageVisits { get; set; }
}
When a visitor go to the website, a visit session starts. One visit session has many page visits. The tracker will write a UniqueVisitorId (GUID) cookie when the first time a visitor go to the website. So we are able to know if a visitor is returning visitor.
Now, I want to know how many unique visitors visited the website in a date range. That is, I want to display a table in our webpage like this;
Date | Unique Visitors Count
------------+-----------------------
2012-05-01 | 100
2012-05-02 | 1000
2012-05-03 | 120
I want to create an index to do this in RavenDB. But I don't know how to write the Map/Reduce query. I though it can be like this:
public class UniqueVisitor_ByDate : AbstractIndexCreationTask<VisitSession, UniqueVisitorByDate>
{
public UniqueVisitor_ByDate()
{
Map = sessions => from s in sessions
select new
{
s.StartTime.Date,
s.UniqueVisitorId
};
Reduce = results => from result in results
group result by result.Date into g
select new
{
Date = g.Key,
UniqueVisitorCount = g.Distinct()
};
}
}
But it's not working. In Ayende's e-book, I know that the result of Map function should be same as the result of Reduce function. So how can I write the correct map/reduce functions?
This index should do what you want:
public class UniqueVisitor_ByDate : AbstractIndexCreationTask<VisitSession, UniqueVisitorByDate>
{
public UniqueVisitor_ByDate()
{
Map = sessions => from s in sessions
select new
{
s.StartTime.Date,
s.UniqueVisitorId,
Count = 1,
};
Reduce = results => from result in results
group result by result.Date
into g
select new UniqueVisitorByDate
{
Date = g.Key,
Count = g.Select(x => x.UniqueVisitorId).Distinct().Count(),
UniqueVisitorId = g.FirstOrDefault().UniqueVisitorId,
};
}
}
Note that it requires the extra 'UniqueVisitorId' property in the 'reduce' and the 'count' property in the map, but you can just ignore those.
这篇关于乌鸦DB:如何创建"按日期" UniqueVisitorCount;指数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!