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

Hvordan bruger man $arrayElemAt og fjerner felter fra det element i MongoDB $projection?

Dette er fra syntaksen for arrayElemAt

Hvilket betyder, at du kan konstruere dine array-elementer, som du vil. I dit tilfælde vil du kun have navnet. Så dette burde virke:

[{
  $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]
      }
    }
  }
}]

Følg op OPDATERING :det blev spurgt om, hvordan man kan tilføje yderligere egenskaber oven på name . Her er projektet:

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

Anden opfølgning som Drag0 spurgte i kommentarerne:Hvis ovenstående ikke er godt nok, fordi resultaterne genererer en bruger:[] array af størrelse 1 i stedet for en objektbruger:{} kan følgende bruges.

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



  1. MongoDB Tutorial:Opret forbindelse til MongoDB i Scala

  2. Postmand socket hang up kunne ikke oprette forbindelse til Mongodb

  3. MapReduce ved hjælp af MongoDB Java Driver fejler med forkert type for BSONElement-påstand

  4. Tilmelding virker ikke - Server returnerer 404 fejlkode