MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB entfernt Elemente in Abhängigkeit von allen anderen Elementen (Iteration)

Basierend auf Ihrem Beispiel möchten Sie also die ranktime ausgeben es sei denn es ist SOURCE2 und das gleiche Datum wurde bereits zur Ausgabe hinzugefügt (jedoch nur für SOURCE2 ).

Sie können $reduce verwenden wie zuvor, aber Sie müssen zuvor hinzugefügte Elemente scannen, was mit $ erreicht werden kann AnyElementTrue Operator und da Ihre Ausgabe das dritte Element enthält, gehe ich davon aus, dass das wiederholte Datum nur dann eine Stoppbedingung ist, wenn dasselbe Datum für SORUCE2 hinzugefügt wurde also $filter wird auch benötigt, um den Satz von zuvor hinzugefügten SOURCE2 vorzubereiten 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-Spielplatz