MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como $ lookup evitando valores nulos no agregado mongodb


Você pode contornar isso não usando $in .

Parece com este $map é executado separadamente para cada documento nos items coleção. Se você executar o mapa em um $addFields stage, você pode usar a forma simples de pesquisa para corresponder o campo adicionado a _id , que lidaria automaticamente com a falta, null , e matriz.

Remova o campo adicionado com um $project estágio, se necessário.
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 
    }}
])