バージョン3.2はaggregationパイプラインの左外部結合のように機能する$lookupを導入しました。我々はisActive: true
を照会したいので、我々はUser
を使用し、
User.aggregate([
{
$match: {isActive: true}
},
{
$lookup: //left outer join
{
from: "books",
localField: "_id",
foreignField: "userid",
as: "books"
}
},
{
$unwind: "$books" // convert each element of "books" array into its own document
},
{
$replaceRoot: { newRoot: "$books" } // remove "books" key. Bring its content out in the root
}
]).exec(function(err, books) {
// books with users isActive true
})
注意が凝集するが、アグリゲーションパイプラインでドキュメントを処理した後、我々は最後にbooks
を取得します。
これはあまりにも悪いことです。大規模なユーザーがいて、ユーザーIDリストを取得するのに長い時間がかかる場合です。 –