2016-02-23 23 views
7

$lookup ile aggregation yaptıktan sonra, tüm belgeyi değil, yalnızca bazı alanları döndürme isteğini istiyorum.

Aşağıdaki sorgu var:

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

Bu istek beni dönecektir bu:

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

isteği iyi çalışıyor, ama sadece almak için campaign.client alanları filtrelemek istediğiniz örnek _id ve username. MongoDB aggregate isteğinde bunu yapmanın bir yolu var mı?

+9

kullanımı '$ project' aşaması. '{ $ projesi: { _id1: 1, campId: 1, articleID: 1, campaign._id: 1, campaign.clientid: 1, campaign.client._id: 1, kampanyası. client.username: 1 } } ' –

+0

@SiddharthAjmera bir cevaba dönüştürmelisiniz, sadece günümü kurtardınız! –

cevap

9

Sadece bu konuda başkalarına yardımcı olmak için, @SiddhartAjmera doğru cevabı yaptı, yalnızca "campaign.clientid" gibi iç içe geçmiş değerler için çift tırnak eklemeye ihtiyacım vardı.

son kodu olmalıdır:

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 
     } 
    } 
]); 
İlgili konular