如何将以下mysql查询转换为mongodb查询:SELECT count(*) as count , DATE_FORMAT( timestamp, '%d-%c-%Y' ) as day, timestamp as tm FROM visits WHERE 1 GROUP BY day ORDER BY tm
。我想在nodejs上使用它,所以我使用的是本机mongodb。
获取mongodb中每天的综合浏览量以及时间戳。
答案 0 :(得分:7)
你的问题没有你的任何努力,我们很少只是“给”人这样的答案,但是,这一次:
NB :您无法操纵日期将其投射到不同的格式,而无需亲自挑选部件并重新加入它们。因此,我遗漏了您所做的日期格式,并将其用作对象。
db.visits.aggregate([
{$project: {
{
date: {day: {$dayOfMonth: '$timestamp'}, month: {$month: '$timestamp'}, year: {$year: '$timestamp'}}},
//day: {concat: [date.day,date.mont,date.year]}
}
}},
{$group: {_id: '$date', tm: '$timestamp', count: {$sum:1}}}
])
答案 1 :(得分:0)
我找到了一个使用mapreduce的mongodb查询,它将输出时间作为unix时间而不是我在问题中提到的格式。但这是正确排序时间的查询。我曾尝试过mongo组查询,但没有根据时间排序。工作的mongo查询是:
db.visits.mapReduce(
function(){
day = Date.UTC(this.timestamp.getFullYear(), this.timestamp.getMonth(), this.timestamp.getDate());
emit({day: day}, {count: 1});
},
function(key, values) {
var count = 0;
values.forEach(function(v) {
count += v['count'];
});
return {count: count};
},
{
out : {inline:1},
sort:{_id:1}
}
);