1
我々はのggregateクエリ MongoDBので$lookup
を使用する場合、我々は、オブジェクトの配列と我々は返すように$project
段階で$arrayElemAt
を使用する必要があるいくつかの時間としてuser
リターン
{
$lookup:
{
from: "users",
localField: "userId",
foreignField: "_id",
as: "user"
}
}
この形式を使用して、単一のオブジェクト。
{
$project:
{
user:
{
$arrayElemAt: [ "$user", 0 ]
}
}
}
ようなので、私の質問は、私たちが代わりに配列$lookup
からステージの単一のオブジェクトとしてuser
を返すことができる方法ですか?
$lookup
と、それを行うためのクリーンな方法は次のように後から新たなステージを追加することですそれを行うことはできません
[$ lookup](https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/)は配列を返します。私はあなたが次の段階でそれを投影するよりも何か良いことをすることはできません。 –
現在、次のステージで '$ project'を使用していますが、私は20以上のフィールドも投影する必要があります。 @AlexBlex –
これは良いかもしれませんが、そうではありません。ルックアップは正確に1つの要素と一致すると仮定します。あなたのケースでは公正かもしれないので、このロジックを維持する最も良い場所は、パイプラインの次の段階であるユーザー空間です。この仮定がもはや成り立たない時点までアプリケーションが進化すると、照会を自分で変更し、一致する要素が2つ以上ある場合の対処方法を選択することができます。 –