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

golangのMongoDBで複数の属性値をチェックしてアイテムリストを取得します

    最初にvenueListに基づいてコレクション内のドキュメントをフィルタリングする集約パイプラインを実行する集約フレームワークを使用する必要があります。 $match<を使用するID / code> オペレーター。

    2番目のパイプラインでは、 ventueListをフラット化する必要があります。 およびsum ドキュメント内のデータを非正規化エントリとしてパイプラインのさらに下流で処理するためのサブドキュメント配列。 $ unwind > ここでは演算子が便利です。

    $matchを使用した追加のフィルター 解凍後に必要なのは、集約するドキュメントのみが次のパイプラインに入ることができるようにするためです。

    メインのパイプラインは、 になります。 $ group アキュムレータ演算子を使用して、フィルタリングされたドキュメントを集計し、目的の合計を作成する演算子ステージ $ sum 。目的の結果を得るには、 $ cond 独立したカウントフィールドを作成すると、ドキュメントの数が $ sum 名前の値に応じた式。

    これをまとめると、次のパイプラインを実行することを検討してください。

    db.collection.aggregate([
        { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
        { "$unwind": "$venueList" },
        { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
        { "$unwind": "$venueList.sum" },    
        {
            "$group": {
                "_id": null,
                "linux": {
                    "$sum": {
                        "$cond": [ 
                            { "$eq": [ "$venueList.sum.name", "linux" ] }, 
                            "$venueList.sum.value", 0 
                        ]
                    }
                },
                "ubuntu": {
                    "$sum": {
                        "$cond": [ 
                            { "$eq": [ "$venueList.sum.name", "ubuntu" ] }, 
                            "$venueList.sum.value", 0 
                        ]
                    }
                }
            }
        }
    ])
    

    mGoで使用する場合は、 httpのガイダンスを使用して、上記のパイプラインを変換できます。 //godoc.org/labix.org/v2/mgo#Collection.Pipe

    上記よりもはるかに高速に実行され、合計リストの不明な値も考慮に入れる、より柔軟でパフォーマンスの高い代替案については、次のように代替パイプラインを実行してください

    db.collection.aggregate([
        { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
        { "$unwind": "$venueList" },
        { "$match": { "venueList.id": { "$in": ["VID1212", "VID4343"] } } },
        { "$unwind": "$venueList.sum" },    
        { 
            "$group": {
                "_id": "$venueList.sum.name",
                "count": { "$sum": "$venueList.sum.value" }
            }
        },
        { 
            "$group": {
                "_id": null,
                "counts": {
                    "$push": {
                        "name": "$_id",
                        "count": "$count"
                    }
                }
            }
        }
    ])
    



    1. キーが存在する場合はHSET

    2. AzureポータルのCosmosDBのAccountKeyはどこにありますか

    3. ubuntu16.04にmongodbをインストール中にエラーが発生しました

    4. Mongo、IDのリストから検索