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

MongoDBを使用したZip配列

    MongoDB 3.4以降では、 $ zip 配列を圧縮する演算子。

    そうは言っても、配列の長さを知らない限り、期待される出力を取得することはできません。

    db.collection.aggregate( [ 
        { "$project": { 
            "zipped": { 
                "$zip": { "inputs": [ "$A", "$B", "$C" ] } 
            } 
        }}
    ])
    

    生成するもの:

    { 
        "_id" : ObjectId("578f35fb6db61a299a383c5b"),
        "zipped" : [
            [ "A1", "B1", 100 ],
            [ "A2", "B2", 200 ],
            [ "A3", "B3", 300 ]
        ]
    }
    

    各サブ配列の要素数がわかっている場合は、 $ map サブドキュメントの配列を返す変数演算子。

    $ map内 式では、 $ arrayElemAtを使用する必要があります 設定する演算子 フィールドA、B、およびCの値。

    db.collection.aggregate( [ 
        { "$project": { 
            "zipped": { 
                "$map": { 
                    "input": { 
                        "$zip": { "inputs": [ "$A", "$B", "$C" ] } 
                    }, 
                    "as": "el", 
                    "in": { 
                        "A": { "$arrayElemAt": [ "$$el", 0 ] }, 
                        "B": { "$arrayElemAt": [ "$$el", 1 ] }, 
                        "C": { "$arrayElemAt": [ "$$el", 2 ] } 
                    } 
                }
            }
        }}
    ] )
    

    生成するもの:

    {
        "_id" : ObjectId("578f35fb6db61a299a383c5b"),
        "zipped" : [
            {
                "A" : "A1",
                "B" : "B1",
                "C" : 100
            },
            {
                "A" : "A2",
                "B" : "B2",
                "C" : 200
            },
            {
                "A" : "A3",
                "B" : "B3",
                "C" : 300
            }
        ]
    }
    



    1. 子の親への参照に基づいてドキュメントを検索する

    2. NodeJSはすべてのユーザーセッションをログアウトします

    3. Redisが1〜2分ごとにSIGTERMを受信して​​いる理由を特定する

    4. Mongooseは、pre('save')のプロパティの以前の値へのアクセスを提供しますか?