15

日付と番号でグループ化しようとしています

私の文書

 { "_id" : ObjectId("4f956dee76ddb26752026e8f"), "request" : "default", "options" : "1", "keyword" : "somekey", "number" : "5b234b79-4d70-437e-8eef-32a2941af40a", "date" : "20120423200446", "time" : 1335193066 }

私の質問

map = "function() { var date = new Date(this.time * 1000); var key = date.getFullYear() + date.getMonth() + date.getDate(); emit({day : key, number: this.number}, {count: 1}); }"

reduce = "function(key, values) { var count = 0; values.forEach(function(v) { count += v['count']; }); return {count: count}; }"

db.txtweb.mapReduce(map, reduce, {out: "pageview_results"});

私のエラー

uncaught exception: map reduce failed:{ "errmsg" : "ns doesn't exist", "ok" : 0 }

何が悪いのかわかりませんが、日付機能で何かをしていると思います。

何か案は。

4

2 に答える 2

29

ns doesn't exist存在しないデータベースまたはコレクションにアクセスしていることを意味します。彼らの名前を確認してください

以下のスクリプトは、日ごとにthis.amountをグループ化します (時間なし)

     db.payments.mapReduce(
             function() {
                 var k = new Date(this.payment_time);
                 k.setMinutes(0);
                 k.setSeconds(0);
                 k.setMilliseconds(0);
                 emit(k, this.amount);
             }, 
             function (key, vals) {
                 var total = 0;
                 for (var i = 0; i < vals.length; i++) {
                     total += vals[i];
                 }
                 return total;
             },
             {
              out : {merge : "resultName" }
             }
     );
    }
};
于 2012-04-23T16:31:52.660 に答える
5

これは主に、スクリプトを実行してデータベースを選択するのを忘れた場合に発生します

use your_database_name;

データベースを選択する行に注意してください。

于 2012-07-26T17:36:45.993 に答える