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

集約データのMongoDB正しいスキーマ

    このスキーマに従うために、方法2のスキーマをさらに再構築することをお勧めします:

    /* 0 */
    {
        "_id" : ObjectId("5577fd322ab13c8cacdd0e70"),
        "order_id" : "VjprK",
        "user_id" : "777",
        "data" : [ 
            {
                "order_date" : ISODate("2015-04-18T08:57:42.514Z"),
                "amount" : 100
            }, 
            {
                "order_date" : ISODate("2015-04-19T08:57:42.514Z"),
                "amount" : 200
            }, 
            {
                "order_date" : ISODate("2015-04-20T08:57:42.514Z"),
                "amount" : 300
            }, 
            {
                "order_date" : ISODate("2015-04-21T08:57:42.514Z"),
                "amount" : 400
            }
        ]
    }
    

    次に、2015-04-18などの特定の日付範囲で集計できます。 2015-04-19へ 。次のパイプラインについて考えてみます。

    var start = new Date(2015, 3, 18),
        end = new Date(2015, 3, 20);
    
    db.orders.aggregate([
        {
            "$match": {
                "user_id": "777",
                "data.order_date": {
                    "$gte": start,
                    "$lt": end
                }
            }
        },
        {
            "$unwind": "$data"
        },
        {
            "$match": {
                "data.order_date": {
                    "$gte": start,
                    "$lt": end
                }
            }
        },
        {
            "$group": {
                "_id": "$user_id",
                "total": {
                    "$sum": "$data.amount"
                }
            }
        }    
    ])
    

    サンプル出力

    /* 0 */
    {
        "result" : [ 
            {
                "_id" : "777",
                "total" : 300
            }
        ],
        "ok" : 1
    }
    


    1. リモートRedisサーバーに接続するにはどうすればよいですか?

    2. Dictionary <DateTime、T>をBSONにシリアル化するときのBsonSerializationException

    3. Chefを使用したMongoDBデータベース自動化の基本

    4. HBaseでのバックアップとディザスタリカバリへのアプローチ