我一直在尝试计算“顶级关键字搬运工”。例如,以下文件的日期范围为2013-12-19至2013-12-23:
{
"domain" : "www.mytestingdomain.com",
"keyword" : "elegant",
"google_rank" : 10,
"date" : ISODate("2013-12-19T00:00:00Z")
}
{
"domain" : "www.mytestingdomain.com",
"keyword" : "elegant",
"google_rank" : 5,
"date" : ISODate("2013-12-20T00:00:00Z")
}
{
"domain" : "www.mytestingdomain.com",
"keyword" : "elegant",
"google_rank" : 1,
"date" : ISODate("2013-12-21T00:00:00Z")
}
{
"domain" : "www.mytestingdomain.com",
"keyword" : "elegant",
"google_rank" : 5,
"date" : ISODate("2013-12-22T00:00:00Z")
}
{
"domain" : "www.mytestingdomain.com",
"keyword" : "elegant",
"google_rank" : 1,
"date" : ISODate("2013-12-23T00:00:00Z")
}
显示特定关键字“优雅”在此特定日期范围内的移动方式。
我的问题(使用Mongo Aggregate框架):
有一种计算这种运动的方法吗?例如:
10 - 5 = 5
5 - 1 = 4
1 - 5 = -4 --> abs --> 4
5 - 1 = 4
---------------------------
absolute total: 5 + 4 + 4 + 4 = 17 --> in this case "seventeen" is the absolute sum of moves that I am looking for.
提前致谢!
答案 0 :(得分:0)
使用您当前的架构,您必须通过迭代正常find()
的结果来计算所需的总和来从您的应用程序代码中获取您要实现的计算类型。
聚合框架(与MongoDB 2.4一样)不支持引用在同一管道步骤中处理的先前文档的查询。有一个开放的功能建议,您可以在MongoDB问题跟踪器中进行观察/观察:SERVER-4437: aggregation: support windowing operation on pipelines。
如果要调整架构以使用聚合框架进行计算,则可以包含一个额外的字段,如previous_google_rank
,以便可以按文档计算排名差异。但是,通过应用程序代码进行计算将是更有效和更明显的选择。