MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB đếm số lượng tài liệu mới mỗi phút dựa trên _id

Bạn có thể thực hiện điều này với M / R. getTimestamp() hoạt động trong M / R vì nó chạy bằng JavaScript trên máy chủ, không quan trọng ngôn ngữ ứng dụng của bạn là PHP hay 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();

Kết quả đầu ra như sau:

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

Tuy nhiên, tôi khuyên bạn nên không sử dụng M / R nhưng thay vào đó hãy chuyển sang khung tổng hợp vì nó nhanh hơn nhiều vì có thể sử dụng các chỉ mục và chạy đồng thời. Hiện tại, A / F không có toán tử để lấy dấu thời gian ra khỏi ObjectID lĩnh vực này mặc dù vậy bạn sẽ cũng phải lưu trữ thời gian tại thời điểm chèn. F.e. với các tài liệu như thế này:

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 }
    } } 
] );

Kết quả đầu ra:

{
    "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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết nối với cơ sở dữ liệu Mongo thông qua đường hầm SSH trong Java

  2. Tại sao mongodb không cung cấp cho tôi hơn 100 tài liệu?

  3. Làm cách nào để RegisterClassMap cho tất cả các lớp trong một không gian tên cho MongoDb?

  4. mongodb kiểm tra xem điểm có nằm trong đa giác không

  5. làm thế nào để giải thích Python Mongo Aggregate bằng cách sử dụng db.command?