2017-03-02 7 views
0

Ich versuche, einen nützlichen Bericht für eine Seite zu bauen Ich bin zu schaffen, aber ich bin Probleme mit mit der Datenformatierung, werfen Sie einen Blick auf diese unter:

db.getCollection('store_spendings').aggregate(
{ 
    "$project": { "spend_dollars": 1, "comments.text": 1, "comments.user.user_id": 1, "store_id": 1 } 
}, 
{ 
    "$lookup": 
    { 
     "from": "corporate_spendings", 
     "localField": "store_id", 
     "foreignField": "store_id", 
     "as": "corporate_spendings" 
    } 
}, 
{ 
    "$match": { "corporate_spendings.region_id": 10816 } 
}, 
{ 
    "$project": { "spend_dollars": "$spend_dollars", "comments": 1, "prior_year_spend_dollars": "$corporate_spendings.prior_year_spend_dollars" } } 
) 

ich ein Ergebnis wie folgt aus:

[ 
    spend_dollars: 321312, 
    comments: [...comments data], 
    prior_year_spend_dollars: [1231231], 
    ... 
] 

ich korrekte Ergebnisse außer dem Format der Daten erhalten, ist ein bisschen off für prior_year_spend_dollars. Ich möchte, dass es ein Feld ist wie spend_dollars anstatt ein Array.

Ich habe versucht mit $first, aber anscheinend funktioniert es nur mit Gruppe. Im Moment mache ich diese "erste" Operation in meiner App, aber im Idealfall würde es auf der db gemacht werden.

Mein idealer Ausgang mit so aussehen:

[ 
    spend_dollars: 321312, 
    comments: [...comments data], 
    prior_year_spend_dollars: 1231231, 
    ... 
] 

Wie kann ich das tun?

+0

Ist Firmensendungen immer ein Array mit der Größe 0? – Veeram

+0

@Veeram ja ist es. Es ist immer Eins-zu-eins-Zuordnung –

+0

okay, versuchen 'prior_year_spend_dollars: {" $ arrayElemAt ": [" $ corporate_spendings.prior_year_spend_dollars ", 0]}' in Projektstufe – Veeram

Antwort

1

Versuchen Sie arrayElemAt Operator in project Bühne, die Sie Wert aus Array basierend auf Index auswählen können.

"prior_year_spend_dollars": 
{"$arrayElemAt": ["$corporate_spendings. 
prior_year_spend_dollars", 0]} 
+0

danke (pad) –