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

MongoDBは、他のすべての要素に応じて要素を削除します(反復)

    したがって、例に基づいて、ranktimeを出力します。 そうでない場合 SOURCE2です および 同じ日付がすでに出力に追加されています(ただし、SOURCE2の場合のみ) 。

    $reduceを使用できます 以前と同じですが、以前に追加した要素をスキャンする必要があります。これは、 $ anyElementTrue 演算子であり、出力には3番目の要素が含まれているため、SORUCE2に同じ日付が追加されている場合にのみ、繰り返し日付が停止条件であると想定しています。 したがって、 $ filter 以前に追加されたSOURCE2のセットを準備するためにも必要です s:

    db.col.updateMany({}, [
        {
            $set: {
                ranktime: {
                    $reduce: {
                        input: "$ranktime",
                        initialValue: [],
                        in: {
                            $cond: [ 
                                { 
                                    $and: [ 
                                        { "$eq": [ "$$this.source", "SOURCE2" ] },
                                        {
                                            $anyElementTrue: {
                                                $map: {
                                                    input: { $filter: { input: "$$value", as: "prev", cond: { $eq: { "$$prev.source", "SOURCE2" } } } }, // already added SOURCE2 elements
                                                    as: "addedElement",
                                                    in: { "$eq": [ { $substr: [ "$$addedElement.datum", 0, 15 ] }, { $substr: [ "$$this.datum", 0, 15 ] } ] }
                                                }                        
                                            }
                                        }
                                    ]
                                },
                                "$$value", // skip current element ($$this) 
                                { $concatArrays: [ "$$value", [ "$$this" ] ] } // add current element to the output
                            ]
                        }
                    }
                }
            }
        }
    ])
    

    Mongo Playground




    1. CPUが100%のときにRedisのパフォーマンスを向上させる方法は?シャーディング?最速の.Netクライアント?

    2. bluebirdを使用してnodejsですべてのプロミスが終了するのを待ちます

    3. MongoDBドライバーで再接続イベントをリッスンする

    4. NoSql参照データ