【发布时间】:2014-06-02 17:53:50
【问题描述】:
我刚开始使用 mongodb,但在使用 mapReduce 函数时遇到了麻烦。 由于某种原因,它似乎没有调用 map 和 reduce 函数。
这是我的代码:
@getMonthlyReports: (req, res) ->
app_id = req.app.id
start = moment().subtract('years', 1).startOf('month').unix()
end = moment().endOf('day').unix()
console.log(start)
console.log(end)
map = ->
geotriggers = 0
pushes = 0
console.log("ok")
date = moment(@timestamp).startOf('month').unix()
for campaign in @campaigns
if campaign.geotriggers?
geotriggers += campaign.geotriggers
else if campaign.pushes?
pushes += campaign.pushes
emit date,
geotriggers: geotriggers
pushes: pushes
reduce = (key, values) ->
console.log("ok")
geotriggers = 0
pushes = 0
for value in values
geotriggers += value.geotriggers
pushes += value.pushes
geotriggers: geotriggers
pushes: pushes
common.db.collection(req.app.id + "_daily_campaign_reports").mapReduce map, reduce,
query:
timestamp:
$gte: start
$lt: end
out:
inline: 1
, (err, results) ->
console.log(results)
ResponseHelper.returnMessage req, res, 200, results
我放了一些 console.logs,似乎 map 和 reduce 函数没有被调用。 我的结果也是未定义的。
我有什么遗漏吗?
【问题讨论】:
-
Mapreduce 在 MongoDB 服务器上运行,当然没有加载 moment.js。改用标准日期函数
标签: node.js mongodb map mapreduce aggregation-framework