<< 大家好,
我使用Symfony2(所以是Doctrine)和MongoDB。我试图按日期“分组”我的结果。 我发现了一个功能,但它的行为很奇怪。
代码:
$qb = $this->dm->createQueryBuilder('Friends');
$qb->map(new \MongoCode("function(){
var date = this.creationDate;
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
day = date.getDate();
if(day < 10){
day = '0'+day;
}
month = 1 + date.getMonth();
if(month < 10){
month = '0'+month;
}
day = day+'/'+month+'/'+date.getFullYear();
emit(day, 1);
}"));
$qb->reduce(new \MongoCode("function(k, vals) {
var count = 0;
for(v in vals) {
count += 1;
};
return count;
}"
));
$qb->sort("creationDate","desc");
结果:
[timeMillis] =&gt; 96 [计数] =&gt;数组([input] =&gt; 2830 [emit] =&gt; 2830 [reduce] =&gt; 74 [输出] =&gt; 79)[ok] =&gt; 1))
输入和发射都很好。但我不明白为什么减少和输出是不同的。 更多的是当我试图对所有结果进行循环时,总数是不同的。
谢谢你
答案 0 :(得分:0)
我认为 reduce 功能应该是
$qb->reduce(new \MongoCode("function(k, vals) {
return Array.sum(vals);
}"
));
答案 1 :(得分:0)
我修复了
替换地图功能 var count = 0;
vals.forEach(function(v) {
count += v['count'];
});
return {count: count};
并发出:
emit(date, { count: 1 });
感谢您的帮助!