$in
を使用しないことでそれを回避できます 。
この$map
のように見えます items
内のドキュメントごとに個別に実行されます コレクション。 $addFields
でマップを実行する場合 ステージでは、単純な形式のルックアップを使用して、追加されたフィールドを_id
に一致させることができます。 、欠落しているnull
を自動的に処理します 、および配列。
$project
で追加されたフィールドを削除します 必要に応じてステージングします。
db.case.aggregate([
{$lookup: {
from: "insurance",
let: { ipids: "$sale.bill.insurancePlanId" },
pipeline: [
{$unwind: "$coveragePlans"},
{$match: { $expr: { $in: ["$coveragePlans._id", "$$ipids"] } }},
{$project: { _id: 0, name: 1 }}
],
as: "insurances"
}}
{$addFields:{
matchArray:{$map: {
input: "$$iid",
in: { $toObjectId: "$$this" }
}}
}},
{$lookup: {
from: "item",
localField: "matchArray",
foreignField:"_id",
as: "items"
}},
{$project:{
arrayField: 0
}}
])