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

同じドキュメント内のある配列から別の配列にIDでオブジェクトを原子的に移動します

    次に例を示します。

    > db.baz.find()
    > db.baz.insert({
    ...   "_id": ObjectId("4d525ab2924f0000000022ad"),
    ...   "arrayField": [
    ...     { id: 1, other: 23 },
    ...     { id: 2, other: 21 },
    ...     { id: 0, other: 235 },
    ...     { id: 3, other: 765 }
    ...   ],
    ...   "someOtherArrayField": []
    ... })
    WriteResult({ "nInserted" : 1 })
    
    function extractIdZero(arrayFieldName) {
        return {$arrayElemAt: [
            {$filter: {input: arrayFieldName, cond: {$eq: ["$$this.id", 0]}}}, 
            0
        ]};
    }
    
    extractIdZero("$arrayField")
    {
        "$arrayElemAt" : [
            {
                "$filter" : {
                    "input" : "$arrayField",
                    "cond" : {
                        "$eq" : [
                            "$$this.id",
                            0
                        ]
                    }
                }
            },
            0
        ]
    }
    
    db.baz.updateOne(
        {_id: ObjectId("4d525ab2924f0000000022ad")},
        [{$set: {
             arrayField: {$filter: {
                 input: "$arrayField",
                 cond: {$ne: ["$$this.id", 0]}
             }},
             someOtherArrayField: {$concatArrays: [
                 "$someOtherArrayField",
                 [extractIdZero("$arrayField")]
             ]}
         }}
        ])
    { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
    > db.baz.findOne()
    {
        "_id" : ObjectId("4d525ab2924f0000000022ad"),
        "arrayField" : [
            {
                "id" : 1,
                "other" : 23
            },
            {
                "id" : 2,
                "other" : 21
            },
            {
                "id" : 3,
                "other" : 765
            }
        ],
        "someOtherArrayField" : [
            {
                "id" : 0,
                "other" : 235
            }
        ]
    }
    



    1. MongoDBが作成したファイル

    2. マングースの自動インクリメントID

    3. ネストされた例外はredis.clients.jedis.exceptions.JedisConnectionExceptionです:プールからリソースを取得できませんでした

    4. Node.jsはMongoDBリファレンスを再利用します