MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Użyj agregacji MongoDB, aby znaleźć przecięcie dwóch zestawów w tym samym dokumencie

Nie byłeś zbyt daleko od pełnego rozwiązania z frameworkiem agregacji - potrzebowałeś jeszcze jednej rzeczy przed $group krok i to jest coś, co pozwoliłoby ci sprawdzić, czy wszystkie używane rzeczy pasują do czegoś, co jest własnością.

Oto pełny potok

> db.house.aggregate(
       {'$unwind':'$uses'}, 
       {'$unwind':'$rooms'}, 
       {'$unwind':'$rooms.owns'}, 
       {$project:  { _id:0, 
                     houseId:1, 
                     uses:"$uses.name", 
                     isOkay:{$cond:[{$eq:["$uses.name","$rooms.owns.name"]}, 1, 0]}
                   }
       }, 
       {$group: { _id:{house:"$houseId",item:"$uses"}, 
                  hasWhatHeUses:{$sum:"$isOkay"}
                }
       },
       {$match:{hasWhatHeUses:0}})

i jego wynik na twoim dokumencie

{
    "result" : [
        {
            "_id" : {
                "house" : 123,
                "item" : "sofa"
            },
            "hasWhatHeUses" : 0
        }
    ],
    "ok" : 1
}

Objaśnienie - po rozpakowaniu obu tablic, teraz chcesz oznaczyć elementy, w których używany element jest równy posiadanemu elementowi i nadać im "punktację" różną od 0. Teraz, gdy przegrupujesz rzeczy z powrotem według identyfikatora domu, możesz sprawdzić, czy jakieś używane przedmioty nie pasują do siebie. Użycie 1 i 0 dla wyniku pozwala na dokonanie sumy, a teraz dopasowanie dla przedmiotu, który ma sumę 0 oznacza, że ​​został użyty, ale nie pasuje do niczego w "posiadanych". Mam nadzieję, że Ci się podobało!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wyraźne w Spring Data MongoDB

  2. Wizualne zarządzanie dokumentami i kolekcjami MongoDB

  3. Wstawianie/aktualizacja wsadowa przy użyciu Mongoid?

  4. Pobierz całą tablicę według jednego z jej ciągów. Tablica znajduje się wewnątrz innej tablicy. Mongodb/Javascript

  5. Agregacja z liczbą poddokumentów spełniających warunek i grupowanie