MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB премахва елементи в зависимост от всички други елементи (итерация)

Така че въз основа на вашия пример искате да изведете ranktime освен ако това е SOURCE2 и същата дата вече е добавена към изхода (но само за SOURCE2 ).

Можете да използвате $reduce както преди, но трябва да сканирате предварително добавени елементи, което може да се постигне с помощта на $ anyElementTrue оператор и тъй като изходът ви съдържа третия елемент, приемам, че повтарящата се дата е условие за спиране само ако същата дата е добавена за 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoDB 32-битово ограничение от 2 GB, най-добри практики

  2. Премахване на дубликати от база данни MongoDB 4.2

  3. Репликация на MongoDB в хибридна облачна среда

  4. как да инсталирате mongodb php драйвер на windows 8 и wamp сървър?

  5. mongoose - ObjectId, който препраща към поддокумент