Mongoでは、$lookup
でaggregation
を実行した後、ドキュメント全体ではなく、一部のフィールドのみを返すように要求したいと思います。
私は次のクエリを持っています:
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"
}
}]);
このリクエストは私にこれを返します:
{
"_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]",
}
]
}
リクエストはうまく機能しますが、campaign.client
のフィールドをフィルタリングして、たとえば_id
とusername
のみを取得したいと思います。 MongoDB aggregate
リクエストでこれを行う方法はありますか?
これで他の人を助けるために、@ SiddhartAjmeraには正しい答えがあります。「campaign.clientid」のようなネストされた値に二重引用符を追加するだけでした。
最終的なコードは次のとおりです。
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": {
"_id": 1,
"campId": 1,
"articleId": 1,
"campaign._id": 1,
"campaign.clientid": 1,
"campaign.client._id": 1,
"campaign.client.username": 1
}
}
]);