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

日付別のMongoDb集計グループ

    db.foos.aggregate(
        [   
            {   $project : { day : {$substr: ["$TimeStamp", 0, 10] }}},        
            {   $group   : { _id : "$day",  number : { $sum : 1 }}},
            {   $sort    : { _id : 1 }}        
        ]
    )
    

    日付によるグループ化は、集計フレームワークの2つのステップで実行できます。並べ替えが必要な場合は、結果を並べ替えるために追加の3番目のステップが必要です。

    1. $project $substrと組み合わせて 各ドキュメントからISODateオブジェクトの最初の10文字(YYYY:MM:DD)を取得します(結果は、フィールド「_id」および「day」を持つドキュメントのコレクションになります)。
    2. $group 日ごとにグループ化し、一致するドキュメントごとに1を追加(合計)します。
    3. $sort 前の集計ステップからの日である「_id」で昇順-これは、ソートされた結果が必要な場合はオプションです。

    このソリューションでは、db.twitter.ensureIndex( { TimeStamp: 1 } )のようなインデックスを利用できません。 、ISODateオブジェクトをその場で文字列オブジェクトに変換するためです。大規模なコレクション(数百万のドキュメント)の場合、これはパフォーマンスのボトルネックになる可能性があり、より高度なアプローチを使用する必要があります。



    1. jndi経由のMongoDb

    2. すべてのクラスターでソケットセッションにアクセスする方法

    3. Mongooseは、ObjectIdではなく文字列として_idを保存しました

    4. redisでパイプラインを使用すると、なぜ100,000レコードと非常に遅いのですか?