sql >> データベース >  >> NoSQL >> MongoDB

MongoDBは、_idに基づいて1分あたりの新しいドキュメントの数をカウントします

    あなたは確かにM/Rでこれを行うことができます。 getTimestamp() サーバー上のJavaScriptで実行されるため、M / Rで動作します。クライアントの言語がPHPであるかPythonであるかは関係ありません:

    map = function() {
        var datetime = this._id.getTimestamp();
    
        var created_at_minute = new Date(datetime.getFullYear(),
                                         datetime.getMonth(),
                                         datetime.getDate(),
                                         datetime.getHours(),
                                         datetime.getMinutes());
        emit(created_at_minute, {count: 1});
    }
    
    reduce = function(key, values) {
        var total = 0;
        for(var i = 0; i < values.length; i++) { total += values[i].count; }
        return {count: total};
    }
    
    db.so.mapReduce( map, reduce, { out: 'inline' } );
    db.inline.find();
    

    次のような出力があります:

    { "_id" : ISODate("2013-08-05T15:24:00Z"), "value" : { "count" : 9 } }
    { "_id" : ISODate("2013-08-05T15:26:00Z"), "value" : { "count" : 2 } }
    

    ただし、 M/Rを使用しないことをお勧めします ただし、インデックスを使用して同時に実行できるため、はるかに高速であるため、代わりに集約フレームワークを使用します。現在、A / Fには、ObjectIDからタイムスタンプを取得するための演算子がありません。 フィールドはまだですが、 挿入時の時刻も保存する必要があります。 F.e.このようなドキュメントで:

    db.so.drop();
    db.so.insert( { date: new ISODate( "2013-08-05T15:24:15" ) } );
    db.so.insert( { date: new ISODate( "2013-08-05T15:24:19" ) } );
    db.so.insert( { date: new ISODate( "2013-08-05T15:24:25" ) } );
    db.so.insert( { date: new ISODate( "2013-08-05T15:24:32" ) } );
    db.so.insert( { date: new ISODate( "2013-08-05T15:24:45" ) } );
    db.so.insert( { date: new ISODate( "2013-08-05T15:25:15" ) } );
    db.so.insert( { date: new ISODate( "2013-08-05T15:25:15" ) } );
    
    db.so.aggregate( [
        { $group: {
            _id: {
                y: { '$year': '$date' },
                m: { '$month': '$date' },
                d: { '$dayOfMonth': '$date' },
                h: { '$hour': '$date' },
                i: { '$minute': '$date' },
            },
            count: { $sum : 1 }
        } } 
    ] );
    

    どの出力:

    {
        "result" : [
            {
                "_id" : {
                    "y" : 2013,
                    "m" : 8,
                    "d" : 5,
                    "h" : 15,
                    "i" : 25
                },
                "count" : 2
            },
            {
                "_id" : {
                    "y" : 2013,
                    "m" : 8,
                    "d" : 5,
                    "h" : 15,
                    "i" : 24
                },
                "count" : 5
            }
        ],
        "ok" : 1
    }
    



    1. Mongo、IDのリストから検索

    2. mongodbは複数の配列を集約します

    3. Expressjsでidの代わりに特定のフィールドを使用してクエリを実行する方法

    4. Redis6.2.0より前のZRANGESTORE