0

将从下面的 js 文件创建一个集合,我的集合中需要三个字段,所以我给出了

 emit(this.cust_id, 1,date);

它给出了以下错误

地图调用失败:JS 错误:错误:fast_emit 需要 2 个参数(匿名):1

但它的工作正常emit(this.cust_id, 1);

请告诉我如何在创建的集合中包含日期??

m = function() { 
 var currentDate = new Date();
        currentDate.setDate(currentDate.getDate()-1);
        var month = (currentDate.getMonth() < 9 ? "0"+ (currentDate.getMonth()+1) : (currentDate.getMonth()+1));
        var day = (currentDate.getDate() < 10 ? "0" + currentDate.getDate() : currentDate.getDate());
        var date = currentDate.getTime();
emit(this.cust_id, 1,date);
 }

r = function (k, vals) { var sum = 0; for (var i in vals) { sum += vals[i]; } return sum; }

   q = function() {
        var currentDate = new Date();
        currentDate.setDate(currentDate.getDate()-1);
        var month = (currentDate.getMonth() < 9 ? "0"+ (currentDate.getMonth()+1) : (currentDate.getMonth()+1));
        var day = (currentDate.getDate() < 10 ? "0" + currentDate.getDate() : currentDate.getDate());
        var date = currentDate.getTime();
        var patt = date;
        var query = {"created_at":"2013-30-04 11:19:52.587"};
        return query;
}


res = db.logins.mapReduce(m, r, { query : q(), out :  "LoginCount" });
4

1 回答 1

1

正如错误所说,您只能发出两个参数。一个代表您将在其上对值进行分组/聚合的键,另一个代表此文档的值。

如果您需要计算多个字段,则需要输出单个值,即文档。在您的示例中,如果 1 表示计数并且 date 表示您可以输出的某个日期:

emit(this.cust_id, {count: 1, date: this.date);

这是如果您从文档中提取日期。我不确定您为什么要存储地图运行的日期,但显然您可以在该字段中包含您自己的日期。

请注意,当您将 value 作为文档发出时,您必须在 reduce 函数中返回完全相同的格式。你可以在这里看到一个例子,它们为每个发射输出两个不同的值,然后在 reduce 中处理这两个值(你可以忽略 finalize 函数)。

于 2013-05-01T20:04:18.520 回答