2016-07-14 7 views
3

Wir versuchen, ein Array von Zeichenfolgen zu einer einzigen Zeichenfolge innerhalb einer Aggregation "beizutreten".MongoDB Aggregation Join Array von Strings zu einzelnen String

Gegeben ist die folgende Datenbestand:

Collection 1:

{ 
    id: 1234, 
    field: 'test' 
} 

Collection 2:

{ 
    id: 1111, 
    collection1_id: 1234, 
    name: 'Max' 
}, 
{ 
    id: 1112, 
    collection1_id: 1234, 
    name: 'Andy' 
} 

Das aktuelle Ergebnis (nach lookup etc.):

{ 
    id: 1234, 
    field: 'test', 
    collection2: ['Max', 'Andy'] 
} 

Das gewünschte Ergebnis:

{ 
    id: 1234, 
    field: 'test', 
    collection2: 'Max, Andy' 
} 

Ist es irgendwie möglich, die ‚collection2‘ zu einem einzigen String zu verbinden? Wir haben es mit $concat versucht, aber es akzeptiert nur Zeichenfolgen.

+0

Fügen Sie den Code, den Sie bisher haben –

Antwort

0

Um dieses Array zu reduzieren, müssen Sie den Prozess zum Client verschieben.

mongo wird in der neuen Ausgabe einige neue Reduzierungsoptionen bieten, aber afaik werden es arithmetische (avg, min, max ....) sein.

1

Sie waren auf dem richtigen Weg.

Fügen Sie $reduce über $concat in Ihrer Bühne hinzu.

'collection2': { 
    '$reduce': { 
     'input': '$collection2', 
     'initialValue': '', 
     'in': { 
      '$concat': [ 
       '$$value', 
       {'$cond': [{'$eq': ['$$value', '']}, '', ', ']}, 
       '$$this'] 
     } 
    } 
} 

Hinweis: Wir verwenden $cond eine führende , in der Verkettung zu verhindern. Sie könnten auch $substrCP vor $reduce als Alternative zu $cond verwenden.

Hoffe, das hilft!

+0

Hat Tipp an Sam. – Friedrich