0

次のmongoDBマップリデュースコードからの出力にアクセスするにはどうすればよいですか?map reduce関数は、find()とprintValue関数を使用して印刷できる「dayOfWeek」と「count」のフィールドを持つ「session_stat」というコレクションを生成していると想定しています。しかし、「mongo code.js」を使用してコードを実行すると、「未定義」になります。前もって感謝します。

db = db.getSiblingDB("mrex");

// simulate saving records that log the lengths of user sessions in seconds                                                                                                                                                                                                                                                                                                 
db.session.save({userid:"a", time: ISODate('2011-11-03 14:17:00'), length: 95});
db.session.save({userid:"b", time: ISODate('2011-11-03 14:23:00'), length: 110});
db.session.save({userid:"c", time: ISODate('2011-11-03 15:02:00'), length: 120});
db.session.save({userid:"d", time: ISODate('2011-11-03 16:45:00'), length: 45});

function mapf()
{
    emit(this.time.getDay(),
     {count:1});
}

function reducef(key, values)
{
    var r = {dayOfWeek:key, count:0};
    values.forEach(function(v)
               {
                   r.count += v.count;
               });
    return r;
}

var mrcom1 = db.runCommand( { mapreduce:"session",
                          map:mapf,
                          reduce:reducef,
                          query: {time: {$gt:ISODate('2011-11-03 00:00:00')}},
                          out: { reduce: "session_stat" }
});

function printValue (r) {
    print(r.count)
};

db.session_stat.find().forEach(printValue)
4

1 に答える 1

1

MongoDB の map-reduce コマンドは、reduce の戻り値を含む「value」という名前のフィールドを持つドキュメントのセットを生成します。サブドキュメントを見つけるには、このフィールド内に到達する必要があります。

代わりにこれを printValue 関数として使用します。

function printValue (r) {
    print(r.value.count)
};
于 2012-10-01T19:39:53.010 に答える