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

MongoDB集計時系列

    次のように集計できます:

    • $match 特定の日付のドキュメント。
    • $groupを作成します および$project クエリする前のオブジェクト。
    • $group $hourによる 、1時間あたり1分あたりのすべてのドキュメントを配列に蓄積します。1分をドキュメント内のどこかに保持します。
    • $project $setUnionとしての変数ドキュメント 1時間あたりのすべてのドキュメントの。
    • $unwind ドキュメント。
    • $sort orders
    • $limit トップ10 必要な書類。

    コード:

    var inputDate = new ISODate("2015-01-09T13:00:00Z");
    var group = {};
    var set = [];
    for(var i=0;i<=60;i++){
        group[i] = {$push:{"doc":"$vals."+i,
                           "hour":"$_id.hour",
                           "min":{$literal:i}}};
        set.push("$"+i);
    }
    group["_id"] = {$hour:"$hour"};
    var project = {"docs":{$setUnion:set}}
    
    db.t.aggregate([
    {$match:{"hour":{$lte:inputDate,$gte:inputDate}}},
    {$group:group},
    {$project:project},
    {$unwind:"$docs"},
    {$sort:{"docs.doc.orders":-1}},
    {$limit:2},
    {$project:{"_id":0,
               "hour":"$_id",
               "doc":"$docs.doc",
               "min":"$docs.min"}}
    ])
    



    1. Sailsでアプリを作成しているときにMongodbのオブジェクトIDを上書きする方法

    2. 欠落値をカバーするmongodbインデックス

    3. アクティビティのタイムラインをmongodbのどこに配置するか、ユーザーに埋め込むか、個別に配置する必要がありますか?

    4. Mongoで$addToSetのキーを指定できますか?