sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man $lookup genom att undvika nollvärden i mongodb-aggregat

Du kan komma runt det genom att inte använda $in .

Det ser ut så här $map exekveras separat för varje dokument i items samling. Om du skulle köra kartan i en $addFields steg, kan du använda den enkla formen av uppslagning för att matcha det tillagda fältet med _id , som automatiskt skulle hantera saknad, null och array.

Ta bort det tillagda fältet med ett $project steg vid behov.

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 
    }}
])


  1. lagra upp-/nedröster i mongodb

  2. Det går inte att skriva buffert till MongoDB GridFS

  3. Kan ett listfält vara en skärvnyckel i MongoDB?

  4. mongodb $matcha operation i $lookup för att jämföra objectId fungerar inte som förväntat