0
我有一个工作Mongo的查询,我需要翻译成红宝石蒙戈组查询:使用Ruby驱动程序
var reducer = function(current, result){
result.loginsCount++;
result.lastLoginTs = Math.max(result.lastLoginTs, current.timeStamp);
}
var finalizer = function(result){
result.lastLoginDate = new Date(result.lastLoginTs).toISOString().split('T')[0];
}
db.audit_log.group({
key : {user : true},
cond : {events : { $elemMatch : { action : 'LOGIN_SUCCESS'}}},
initial : {lastLoginTs : -1, loginsCount : 0},
reduce : reducer,
finalize : finalizer
})
我打几个症结得到这个在Ruby中工作。我对Mongo并不是很熟悉,而且我不确定要作为参数传递给方法调用。这是我最好的猜测,连接到数据库和一个名为audit_log的集合后:
audit_log.group({
"key" => {"user" => "true"},
"cond" => {"events" => { "$elemMatch" => { "action" => "LOGIN_SUCCESS"}}},
"initial" => {"lastLoginTs" => -1, "loginsCount" => 0},
"reduce" => "function(current, result){result.loginsCount += 1}",
"finalize" => "function(result){ result.lastLoginDate = new Date(result.lastLoginTs).toISOString().split('T')[0]; }
})
或类似的东西。我尝试过使用Mongo文档进行更简单的聚合操作,但是我也无法使用它。我只能得到非常简单的查询来返回结果。这些键(键,cond,initial等)甚至是必需的,还是仅用于JavaScript?
我在Github上找到了这个参考:这是一个Ruby-Mongo Koans tdd教程,并且有一个group()函数的例子。 https://github.com/chicagoruby/MongoDB_Koans/blob/master/koans/about_groups.rb 因此,reduce和finalize方法作为包含JavaScript函数的字符串传递给Mongo。下面是从教程的一个示例: '@ zips.group( [:城市], {},{ 'zsum'=> 0, 'ZC'=> 0, 'avg_pop'=> 0}, 'function(doc,out){out.zsum + = doc.population; out.zc + = 1;}', 'function(out){out.avg_pop = out.zsum/out.zc}')' – 2014-09-11 15:23:14