所以我有以下PHP代码在MongoDB数据库集合上运行map-reduce命令:
$map = new MongoCode("function() { emit(this.app, this.bytes); }");
$reduce = new MongoCode("function(k, vals) { ".
"var sum = 0;".
"for (var i in vals) {".
"sum += vals[i];".
"}".
"return sum; }");
$dateAdded = mktime(0,0,0,5,1,2015);
//echo $dateAdded." = ".date("r",$dateAdded)."<br>\n";
$request = $db->command(array(
"mapreduce" => "log",
"map" => $map,
"reduce" => $reduce,
"query" => array("event" => "destroy", "systimelong" => array('$gt' => $dateAdded)),
"out" => array("inline" => 1)));
var_dump($request);
当数据作为整数存储在数据库中时,这实际上非常有用。但有时数据会以字符串形式存储。为什么?那是另一个现在无法改变的故事。最终它将是一个整数,但我真的想知道我是否以及如何修改它来处理数据为字符串的情况,以防它发生。
由于Mongo使用Javscript,我觉得我应该可以在parseInt()
和/或$map
函数中使用$reduce
函数,但它似乎不是工作。
另外,我该如何处理查询? systimelong字段只是unixtime,我使用PHP mktime()
函数为月初生成一个整数值。再次,它比较整数更好,但我需要先转换字符串值。
有什么想法吗?