12

私がするとき$lookup、私の場合はforeignField:"_id"、配列で見つかった要素を取得します。コレクションからの$lookup取得が完了した後の出力からの 1 つのドキュメントを次に示します。fromUsertoUserusers

{ 
    _id : { from : 57b8da368e4a6e1f0043cb3d, to : 57c381af7008e51f009d92df }, 
    fromUser : [
        {
            _id : 57b8da368e4a6e1f0043cb3d, 
            userName: "A"
        }
    ], 
    toUser : [
        {
            _id : 57c381af7008e51f009d92df, 
            userName: "B"
        }
    ]
}

お気づきfromUserのとおりtoUser、配列です。投影する方法fromUserなどtoUser、配列の代わりに、次のuserNameようにユーザーの .

{
    _id : { from : 57b8da368e4a6e1f0043cb3d, to : 57c381af7008e51f009d92df },
    fromUser: "A",
    toUser: "B"
}
4

1 に答える 1

37

$arrayElemAt演算子を使用して、次のように集計パイプラインに$projectステージを追加することで、これを実現できます。

// your previous stages incl. lookup
...
$project: {
    fromUser: { $arrayElemAt: ["$fromUser.userName", 0] },
    toUser: { $arrayElemAt: ["$toUser.userName", 0] }
}
...
于 2016-08-30T04:01:32.003 に答える