MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB supprime les éléments en fonction de tous les autres éléments (Itération)

Donc, sur la base de votre exemple, vous souhaitez afficher le ranktime sauf si c'est SOURCE2 et la même date a déjà été ajoutée à la sortie (mais uniquement pour SOURCE2 ).

Vous pouvez utiliser $reduce comme précédemment mais vous devez analyser les éléments ajoutés précédemment qui peuvent être obtenus en utilisant $ anyElementTrue opérateur et puisque votre sortie contient le troisième élément, je suppose que la date répétée est une condition d'arrêt uniquement si la même date a été ajoutée pour SORUCE2 donc $filter est également nécessaire pour préparer l'ensemble de SOURCE2 précédemment ajouté 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