2016-02-23 11 views
7

In mongo, dopo aver fatto un aggregation con $lookup, vorrei che la richiesta restituisse solo alcuni campi e non l'intero documento.

Ho la seguente query:

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" 
    } 
}]); 

Questa richiesta mi tornerà questo:

{ 
"_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]", 
     } 
    ] 
} 

La richiesta funziona bene, ma vorrei per filtrare i campi in campaign.client per ottenere solo per esempio _id e username. C'è un modo per farlo in una richiesta MongoDB aggregate?

+9

usare un 'fase project' $. '{ $ progetto: { _ID1: 1, campId: 1, articleId: 1, campaign._id: 1, campaign.clientid: 1, campaign.client._id: 1, campagna. client.nomeutente: 1 } } ' –

+0

@SiddharthAjmera dovresti trasformarlo in una risposta, hai appena salvato la mia giornata! –

risposta

9

Solo per aiutare gli altri con questo, @SiddhartAjmera ha fatto la risposta giusta, ho solo bisogno di aggiungere doppie virgolette per valori nidificati come "campaign.clientid".

Il codice finale dovrebbe essere:

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 
     } 
    } 
]); 
Problemi correlati