Mam kolekcję zdarzeń, którą przechodzę, aby znaleźć kategorię dla określonego wydarzenia, a następnie aktualizuję inną moją kolekcję za pomocą $ push komunikat. Problem polega na tym, że gdy dwa wydarzenia mają tę samą kategorię, utworzą duplikat, którego nie chcę.Wepchnij element do tablicy, jeśli go nie ma (brak duplikatów)
Wiem o upserts, ale nie jestem pewien, czy są one najlepszym sposobem postępowania w tej sprawie? I jestem trochę zdezorientowany, jeśli chodzi o to, jak napisać upsert, który działa z "$ push" -wymaganie.
To jest jak moja zmiana wygląda teraz:
self.users.update({"user_id": event['userid']}, {'$push': {'campaigns': UserCampaign}})
..where:
UserCampaign = {
"id": campaign['id'],
"name": campaign['name']
}
W "UserCampaign" zostanie wypełnione z tych samych informacji od czasu do czasu, a ponieważ mój kolekcja prawdopodobnie będzie bardzo duża. Chcę ją ukończyć tak wydajnie, jak to tylko możliwe.
TLDR; Chcę zaktualizować tablicę w dokumencie znalezionym za pomocą "wypychania" bez ryzyka otrzymania duplikatów.
ah, wcześniej wskazałem kilka innych operatorowi $ addToSet, ale myślę, że sposób, w jaki pytanie zostało sformułowane, został wykorzystany w odpowiedziach związanych z wersjami, zamiast dodawać do tablicy elementów, szczególnie gdy ostatnie pytanie podsumowujące jednoznacznie mówi: "zaktualizuj moją kolekcję za pomocą" wypychania "", gdy masz na myśli coś takiego: zaktualizuj tablicę w dokumencie za pomocą polecenia push bez duplikowania elementów. Zmieniłem to pytanie, aby lepiej odzwierciedlało twoje rzeczywiste wymagania. –
Tak, rozumiem, że może być trudno, abyście wiedzieli, czego potrzebuję. To było moje słabe wyjaśnienie problemu, który był winą. Przykro mi, ale znalazłem działające rozwiązanie i dlaczego specjalnie wskazałem, że $ push w tytule było takie, ponieważ naprawdę myślałem, że właśnie to wykorzystam. W każdym razie przeczytałem o $ addToSet i od razu wiedziałem, że to operator, który rozwiąże mój problem. Dziękuję za twoją pomoc i zaktualizowałem ten wątek, aby ludzie, tak jak ja, w przyszłości, mogli sprostować, tak jak ja. – Ms01