sql >> Database >  >> NoSQL >> MongoDB

Hoe gebruik je $arrayElemAt en verwijder je velden uit dat element in MongoDB $projection?

Dit komt uit de syntaxis van arrayElemAt

Dat betekent dat u uw array-elementen kunt construeren zoals u dat wilt. In jouw geval wil je alleen de naam. Dus dit zou moeten werken:

[{
  $match: {
    jobCategoryId: mongoose.Types.ObjectId(jobCategoryId)
  }
}, {  
  $lookup: {  
    from: 'users',
    localField: 'userId',
    foreignField: '_id',
    as: 'user'
  }
}, {  
  $project: {  
    _id: 1,
    description: 1,
    title: 1,
    user: {  
      name: {
        $arrayElemAt: ["$user.name", 0]
      }
    }
  }
}]

Volg UPDATE op :er werd gevraagd hoe extra eigenschappen bovenop name te komen . Hier is het project:

{  
  $project: {  
    _id: 1,
    description: 1,
    title: 1,
    user: {  
      name: {  
        $arrayElemAt: ["$user.name", 0]
      },
      email: {  
        $arrayElemAt: ["$user.email", 0]
      }
    }
  }
}

Tweede follow-up zoals Drag0 in de opmerkingen vroeg:Als het bovenstaande niet goed genoeg is omdat de resultaten een user:[] array van grootte 1 genereren in plaats van een object user:{} kan het volgende worden gebruikt.

{  
  $project: {
    _id: 1,
    description: 1,
    title: 1,
    user: {
      $let: {
        vars: {
          firstUser: {
            $arrayElemAt: ["$user", 0]
          }
        },
        in: {
          name: "$$firstUser.name",
          email: "$$firstUser.email"
        }
      }
    }
  }
}



  1. Kan MongoDB niet starten als een service

  2. MongoDB elemMatch werkt niet verwacht

  3. Voorouders in MongoDb ophalen met behulp van de boomstructuur

  4. Wat gebeurt er als afwikkelen wordt toegepast op een veld dat niet aanwezig is tijdens het gebruik van aggregatie in mangoest?