2016-07-10 15 views
0

Ich bin mit mongodbmongodb Aggregatabfrage mit verschachtelten Arrays

Ich habe n Häuser, jedes Haus hat streetid, houseid, neighborhoodid

{streetid, houseid, Nachbarschaft}

{av, 1, A}, {av, 2, A}, {av, 3, A}

{av, 5, B}, {av, 6, B}, {av, 7, B}

{ rd, 1, A}, {rd, 22, A}, {rd, 33, A}

Ich möchte nach der Straße gruppieren, so dass jede Straße eine Reihe von Nachbarschaften hat (eine Straße kann mehrere Stadtteile umfassen) und jede Nachbarschaft wird eine Liste von Häusern haben (die Häuser müssen auch zur Straße gehören)

sollte das Ergebnis so etwas wie

{av [{A, [1,2,3]}, {B, [5,6,7]}]}

// Straße A umfasst Nachbarschaft A und B jeweils mit seinen Häusern

{rd, [{A, [1,22,33]}}}

// Straße rd umspannt Nachbarschaft A mit seinen Häusern

+0

Ihre Dokumente nicht gültig sind. – styvane

Antwort

1

Diese Arbeit sollte:

db.example.aggregate([ 
    { 
    $group: { 
     _id: { neighbourhood: "$neighbourhood", streetId: "$streetId" }, 
     house: { $addToSet: "$houseId" } 
    } 
    }, 
    { 
    $group: { 
     _id: { street: "$_id.streetId" }, 
     housesInNeighbourHood: { $addToSet: { neighbourhoodId: "$_id.neighbourhood", houseId:"$house" } } 
    } 
    } 
]) 
Verwandte Themen