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

Mongoアグリゲーション:値をグループに分割する(パーティションごと)

    これが集計の現在の出力であるとしましょう:

    {
        "_id" : null,
        "datesWithPartitions" : [
            {
                "date" : ISODate("2019-04-12T18:30:00Z"),
                "partition" : 0
            },
            {
                "date" : ISODate("2019-04-12T20:00:00Z"),
                "partition" : 1
            },
            {
                "date" : ISODate("2019-04-12T20:10:00Z"),
                "partition" : 1
            },
            {
                "date" : ISODate("2019-04-12T21:00:00Z"),
                "partition" : 2
            },
            {
                "date" : ISODate("2019-04-12T21:15:00Z"),
                "partition" : 2
            },
            {
                "date" : ISODate("2019-04-12T21:45:00Z"),
                "partition" : 3
            },
            {
                "date" : ISODate("2019-04-12T23:00:00Z"),
                "partition" : 4
            }
        ]
    }
    

    必要な形式でデータを取得するには、次の集計手順を追加する必要があります。

    db.col.aggregate([
        {
            $unwind: "$datesWithPartitions"
        },
        {
            $group: {
                _id: "$datesWithPartitions.partition",
                numEvents: { $sum: 1 },
                startDate: { $min: "$datesWithPartitions.date" },
                endDate: { $max: "$datesWithPartitions.date" }
            }
        },
        {
            $project: {
                _id: 0,
                partition: "$_id",
                startDate: 1,
                endDate: 1,
                numEvents: 1
            }
        }
    ])
    

    $ unwind ドキュメントごとに1つの日付が返され、$groupを適用できます。 $min を使用 および $ max パーティションの境界と $sum を取得するには パーティション要素をカウントするには




    1. OSXでのRSpecのロード時間は信じられないほど長い

    2. mongoデータベースにクエリを実行するための検索バーを備えたWebサイトを作成するにはどうすればよいですか?

    3. MongoDBでサブドキュメントを安全に挿入または更新します

    4. UTF-8を考慮に入れるようにMongoDBを構成するにはどうすればよいですか?