sql >> Databáze >  >> NoSQL >> MongoDB

Jak $lookup vyhnout se nulovým hodnotám v agregaci mongodb

Můžete to obejít tím, že nebudete používat $in .

Vypadá to takto $map se provádí samostatně pro každý dokument v items sbírka. Pokud byste mapu spustili v $addFields fázi, můžete použít jednoduchou formu vyhledávání k přiřazení přidaného pole k _id , který by automaticky zpracoval chybějící, null a pole.

Odstraňte přidané pole s $project v případě potřeby.

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. Aktualizovat dokument MongoEngine pomocí pythonského diktátu?

  2. Mongodb sečte velikost polí pole

  3. Nelze se připojit k MongoDB Replica Set z jiného serveru pomocí robo3T a v C#

  4. Problém uzel + Mongodb + ISODate + časové pásmo