sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB tar bort element beroende på alla andra element (Iterering)

Så baserat på ditt exempel vill du mata ut ranktime om inte det är SOURCE2 och samma datum har redan lagts till i utgången (men bara för SOURCE2 ).

Du kan använda $reduce som tidigare men du måste skanna tidigare tillagda element som kan uppnås med $ anyElementTrue operatorn och eftersom din utdata innehåller det tredje elementet antar jag att det upprepade datumet är ett stoppvillkor endast om samma datum har lagts till för SORUCE2$filter behövs också för att förbereda uppsättningen av tidigare tillagda 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. Finns det en annan sak i MongoDB till $cond under aggregering

  2. skaffa en python docker-behållare för att interagera med en redis docker-behållare

  3. Meddelande om nyckelns utgång i redis python

  4. MongoDB-aggregation med $lookup inkluderar (eller projekterar) endast några fält att returnera från frågan