2013-04-02 6 views
5

Stwierdzam, że struktura agregacji mongodb jest niezwykle potężna - wydaje się dobrym rozwiązaniem do spłaszczenia obiektu. Mój schemat używa tablicy podrzędnych obiektów w tablicy zwanej materiałami. Liczba materiałów jest zmienna, ale konkretne pole (kategoria) będzie unikalne dla obiektów w tablicy. Chciałbym użyć struktury agregacji do spłaszczenia struktury i dynamicznej zmiany nazw pól na podstawie wartości pola kategorii. Nie mogłem znaleźć łatwego sposobu na osiągnięcie tego przy pomocy projektu $ wraz z $ cond. Czy istnieje sposób?MongoDB Aggregation Framework - dynamiczne zmienianie nazwy pola

Powodem szeregu istotnych przedmiotów jest umożliwienie prostego przeszukiwania:

np {'materials.name': 'XYZ'} cofa każdy dokument, w którym znaleziono XYZ.

E.g. z przed i po dokumencie

{ 
"_id" : ObjectId("123456"), 
"materials" : [ 
    { 
     "name" : "XYZ", 
     "type" : "Red", 
     ... 
     "category" : "A" 
    }, 
    { 
     "name" : "ZYX", 
     "type" : "Blue", 
     ... 
     "category" : "B" 
    }] 
} 

do

{ 
"material_A_name" : "XYZ", 
"material_A_type" : "Red", 
... 
"material_B_name" : "ZYX", 
"material_B_type" : "Blue", 
... 
} 
+0

Twój dokument "po" jest nieprawidłowy JSON – JohnnyHK

+0

Dzięki, zaktualizowany - był to błąd z tworzenia makiety w moim edytorze – user2234151

+0

Ok, widzę, co próbujesz teraz zrobić. W strukturze ag nie ma zbyt wiele wsparcia dla dynamicznie generowanych kluczy, więc nie widzę sposobu, w jaki można to zrobić. Być może będziesz musiał po prostu opublikować wynik w kodzie, aby to zrobić. – JohnnyHK

Odpowiedz

5

Jest wniosek o czymś takim w JIRA https://jira.mongodb.org/browse/SERVER-5947 - głosować go, jeśli chcesz mieć tę funkcję.

Tymczasem istnieje obejście, jeśli wiesz z góry, jakie są możliwe wartości kluczy (tj. Wszystkie unikalne wartości "kategorii") i mam na sobie przykładowy kod on my blog.

+0

Zauważ, że zdolność do transponowania kluczy do wartości i odwrotnie jest dostępna od wersji MongoDB 3.4.4. –