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

MongoDb:find dybt indlejret objekt med $lookup

Du kan finde indlejret device ved hjælp af $filter, $arrayElemAt og $let:

device: {
    $let: {
        vars: {
            building: { 
                $arrayElemAt: [ { $filter: { input: "$company_name.buildings", cond: { $eq: [ "$$this._id", "$buildingId" ] }} }, 0 ] 
                }
        },
        in: {
            $let: {
                vars: {
                    gateway: {
                        $arrayElemAt: [ { $filter: { input: "$$building.gateways", cond: { $eq: [ "$$this._id", "$gatewayId" ] }} }, 0 ] 
                    }
                },
                in: { $arrayElemAt: [ { $filter: { input: "$$gateway.devices", cond: { $eq: [ "$$this._id", "$deviceId" ] }} }, 0 ] }
            }
        }
    }
}

Fuld løsning




  1. Brug af findOne i en loop tager for lang tid i Node.js

  2. Understøttelse af flere brugertyper af Passport-lokal mongoose node.js

  3. Ugyldiggørelse af stakoverløb, Redis og cache

  4. MongoDB $toInt