sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan $lookup ved at undgå null-værdier i mongodb-aggregat

Du kan komme uden om det ved ikke at bruge $in .

Det ser sådan ud $map udføres separat for hvert dokument i items kollektion. Hvis du skulle køre kortet i en $addFields fase, kunne du bruge den simple form for opslag til at matche det tilføjede felt med _id , som automagisk ville håndtere manglende, null , og array.

Fjern det tilføjede felt med et $project fase, hvis det er nødvendigt.

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. pymongo- Hvordan kan jeg have forskellige værdier for et felt sammen med andre forespørgselsparametre

  2. Mongoose sum felter fra udfyldte dokumenter

  3. Redis Vs RabbitMQ som datamægler/beskedsystem mellem Logstash og elasticsearch

  4. hvordan tilføjer jeg en værdi til toppen af ​​et array i mongodb?