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

mongoDB:$unwindを元に戻す方法

    これを処理する方法には特定のトリックがありますが、最初にMongoDB 2.6以降を使用できる場合は、 $ unwind 。これは、大量のドキュメントを処理している場合にパフォーマンスに非常に役立ちます。

    ここでの主要な演算子は、 $ map> 配列を適切に処理し、 $ allElementsTrue 「結果」フィールドを評価する演算子。ここでの「map」の使用により、内部の「tests」配列の両方のテストで、そこにある「result」フィールドがすべて真の条件を満たす場所を確認できます。外側の配列の場合、この「結果」は必要に応じてこれらのドキュメントに配置できます。もちろん、ドキュメントの完全な評価は同じルールに従います。

    db.test.aggregate([
        { "$project": {
            "name": 1,
            "result": {
                "$allElementsTrue": {
                    "$map": {
                        "input": "$acts",
                        "as": "act",
                        "in": {
                            "$allElementsTrue": {
                                "$map": {
                                     "input": "$$act.tests",
                                     "as": "test",
                                     "in": "$$test.result"
                                }
                            }
                        }
                    }
                }
            },
            "acts": {
                "$map": {
                     "input": "$acts",
                     "as": "act",
                     "in": {
                        "name": "$$act.name",
                        "result": {
                            "$allElementsTrue": {
                                "$map": {
                                    "input": "$$act.tests",
                                    "as": "test",
                                    "in": "$$test.result"
                                }
                            }
                        },
                        "tests": "$$act.tests"
                     }
                }
            }
        }}
    ])
    

    以前のバージョンでこれを行うには、 $ group これらの「結果」フィールドでテストを再度実行しながら、アレイを「再構築」するために、2つのステップに戻ります。ここでの他の違いは、 $minを使用することです。 falseとしての演算子 trueよりも小さい値と見なされます 同じ「allElements」の概念に基づいて評価します:

    db.test.aggregate([
        { "$unwind": "$acts" },
        { "$unwind": "$acts.tests" },
        { "$group": {
            "_id": {
                "_id": "$_id",
                "name": "$name",
                "actName": "$acts.name"
            },
            "result": { "$min": "$acts.tests.result" },
            "tests": {
               "$push": {
                   "name": "$acts.tests.name",
                   "result": "$acts.tests.result"
               }
            }
        }},
        { "$group": {
            "_id": "$_id._id",
            "name": { "$first": "$_id.name" },
            "result": { "$min": "$result" },
            "acts": {
                "$push": {
                    "name": "$_id.actName",
                    "result": "$result",
                    "tests": "$tests"
                }
            }
        }}
    ])
    



    1. データをTensorflowに読み込む方法は?

    2. RailsにMongoidを搭載したMongoDB-地理空間インデックス

    3. ハウツー:50行未満のコードを使用して大規模にスキャンされたPDFにインデックスを付ける

    4. PowershellMongodb認証