2017-01-11 11 views
2

私は_idから$ルックアップを行っています。結果は常に1つの文書になります。したがって、結果を1つの項目を持つ配列ではなくオブジェクトにしたい。

let query = mongoose.model('Discipline').aggregate([ 
    { 
     $match: { 
     project: mongoose.Types.ObjectId(req.params.projectId) 
     }, 
    }, 
    { 
     $lookup: { 
     from: "typecategories", 
     localField: "typeCategory", 
     foreignField: "_id", 
     as: "typeCategory" 
     } 
    }, 
    { 
     $project: { 
     title: 1, typeCategory: "$typeCategory[0]" 
     } 
    } 
    ]); 

この表記:"$typeCategory[0]"が機能していません。これを行うためのスマートな方法はありますか?

+0

使用 'typeCategory:{$ arrayElemAt:[ "$ typeCategory"、0]}'今の

$arrayElemAtの構文は次のよう{ $arrayElemAt: [ <array>, <idxexOfArray> ] }

あります。この問題に具体的に対処するためのチケットがあります。https://jira.mongodb.org/browse/SERVER-27589 – Veeram

答えて

2

$unwindを使用できます。それはあなたが$project段階で$arrayElemAt使用することができ、各要素

let query = mongoose.model('Discipline').aggregate([ 
    { 
     $match: { 
     project: mongoose.Types.ObjectId(req.params.projectId) 
     }, 
    }, 
    { 
     $lookup: { 
     from: "typecategories", 
     localField: "typeCategory", 
     foreignField: "_id", 
     as: "typeCategory" 
     } 
    }, 
    {$unwind: '$typeCategory'}, 
    { 
     $project: { 
     title: 1, typeCategory: "$typeCategory" 
     } 
    } 
    ]); 
0

のために出力に入力文書から文書を配列フィールドを解体します。

mongoose.model('Discipline').aggregate([ 
    { 
     $match: { 
     project: mongoose.Types.ObjectId(req.params.projectId) 
     }, 
    }, 
    { 
     $lookup: { 
     from: "typecategories", 
     localField: "typeCategory", 
     foreignField: "_id", 
     as: "typeCategory" 
     } 
    }, 
    { 
     $project: { 
     name: 1, typeCategory: {$arrayElemAt:["$typeCategory",0]} 
     } 
    } 
]); 
関連する問題