2016-02-23 7 views
7

In Mongo, nach einer aggregation mit $lookup, möchte ich die Anfrage nur einige Felder und nicht das gesamte Dokument zurückgeben.

Ich habe die folgende Abfrage:

db.somecollection.aggregate([{ 
    $lookup: { 
     from: "campaigns", 
     localField: "campId", 
     foreignField: "_id", 
     as: "campaign" 
    } 
}, { 
    $unwind: "$campaign" 
}, { 
    $lookup: { 
     from: "entities", 
     localField: "campaign.clientid", 
     foreignField: "_id", 
     as: "campaign.client" 
    } 
}]); 

Diese Anfrage wird zurückkehren mir dies:

{ 
"_id" : ObjectId("56cc7cd1cc2cf62803ebfdc7"), 
"campId" : ObjectId("56c740e4479f46e402efda84"), 
"articleId" : ObjectId("56c742c06094640103ba3843"), 
"campaign" : { 
    "_id" : ObjectId("56c740e4479f46e402efda84"), 
    "clientid" : ObjectId("56c740b8479f46e402efda83"), 
    "client" : [ 
     { 
      "_id" : ObjectId("56c740b8479f46e402efda83"), 
      "username" : "someusername", 
      "shhh" : "somehashedpassword", 
      "email" : "[email protected]", 
     } 
    ] 
} 

Die Anfrage funktioniert gut, aber ich möchte die Felder in campaign.client nur filtern zu bekommen für Beispiel _id und username. Gibt es eine Möglichkeit, dies in einer MongoDB aggregate Anfrage zu tun?

+9

Verwendung eine '$ project' Bühne. '{$ Projekt: { _id1: 1, Campid: 1, articleId: 1, campaign._id: 1, campaign.clientid: 1, campaign.client._id: 1, Kampagne. client.username: 1 } } ' –

+0

@SiddharthAjmera sollten Sie es in eine Antwort verwandeln, Sie haben gerade meinen Tag gerettet! –

Antwort

9

Nur um anderen zu helfen, hat @SiddhartAjmera die richtige Antwort gegeben, ich musste nur doppelte Anführungszeichen für verschachtelte Werte wie "campaign.clientid" hinzufügen.

Der endgültige Code sollte sein:

db.somecollection.aggregate([{ 
    $lookup: { 
     from: "campaigns", 
     localField: "campId", 
     foreignField: "_id", 
     as: "campaign" 
    } 
    }, { 
     $unwind: "$campaign" 
    }, { 
     $lookup: { 
      from: "entities", 
      localField: "campaign.clientid", 
      foreignField: "_id", 
      as: "campaign.client" 
     } 
    }, 
    { 
     $project : { 
      "_id1" : 1, 
      "campId" : 1, 
      "articleId" : 1, 
      "campaign._id" : 1, 
      "campaign.clientid" : 1, 
      "campaign.client._id" : 1, 
      "campaign.client.username" : 1 
     } 
    } 
]); 
Verwandte Themen