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

Monogodbのフィールド名で製品グループを賢く数える方法は?

    $ arrayToObjectの使用を活用できます 一連のパイプライン内の演算子と最後の $ replaceRoot 目的の結果を得るためのパイプライン。

    hubId パイプライン操作中に $arrayToObject<として文字列に変換されます/ code> 「key」値が文字列の場合、演算子は適切に機能します。したがって、hubIdの場合 はObjectIdであり、 $ toString $ arrayToObjectの場合に必要です 適用されます。

    次の集約パイプラインを実行する必要があります:

    Product.aggregate([
        {  "$group": {
                "_id": {
                    "hubId": "$hubId",
                    "status": "$ProductStatus"
                },
                "count": { "$sum": 1 }
        } },
        { "$group": {
            "_id": "$_id.hubId",
            "counts": {
                "$push": {
                    "k": "$_id.status",
                    "v": "$count"
                }
            }
        } },
        { "$group": {
            "_id": null,
            "counts": {
                "$push": {
                    "k": { "$toString": "$_id" },
                    "v": "$counts"
                }
            }
        } },
        { "$addFields": {
            "counts": {
                "$map": {
                    "input": "$counts",
                    "in": {
                        "$mergeObjects": [
                            "$$this",
                            { "v":  { "$arrayToObject": "$$this.v" } }
                        ]
                    }
                }
            }
            
        } },
        {  "$replaceRoot": {
            "newRoot": { "$arrayToObject": "$counts" }
        } }  
    ])
    

    これにより、次の結果ドキュメントが生成されます。

    {
        "xyz" : {
            "Delivered" : 1,
            "On the Way" : 1
        },
        "mlm" : {
            "On the Way" : 1,
            "Delivered" : 2
        },
        "yyy" : {
            "On the Way" : 1,
            "Delivered" : 1,
            "Cancelled" : 1
        }
    }
    

    もちろん、これはカウントがゼロの他のステータスを生成しませんが、ソリューションは良い出発点になる可能性があります。




    1. RedHatにMongoDBをインストールするとエラーが発生する

    2. Mongooseを使用したMongoDBへのNode.jsSSHトンネリング

    3. golang mongodb(mgo)はドキュメントを挿入していません

    4. mongoでトランザクションのロールバックを実現するにはどうすればよいですか?