MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak użyć $arrayElemAt i usunąć pola z tego elementu w MongoDB $projection?

Pochodzi ze składni arrayElemAt

Co oznacza, że ​​możesz konstruować elementy tablicy w dowolny sposób. W twoim przypadku chcesz tylko imię. Więc to powinno działać:

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

Kontynuuj UPDATE :zapytano, jak dodać dodatkowe właściwości nad name . Oto projekt:

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

Druga kontynuacja jak pytał Drag0 w komentarzach:Jeśli powyższe nie jest wystarczająco dobre, ponieważ wyniki generują tablicę user:[] o rozmiarze 1 zamiast obiektu user:{}, można użyć następującego.

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak obliczyć cenę dodatnią i ujemną za pomocą mongodb lub robomongo?

  2. mangusta/mongodb sortowanie niestandardowe

  3. Jak obliczyć odległość trasy między wieloma punktami GeoJSON w MongoDB?

  4. mongoimport w docker-compose wyświetla błąd „Nie można uruchomić usługi”

  5. Dlaczego otrzymuję pymongo.cursor.Cursor, gdy próbuję wysłać zapytanie do bazy danych mongodb za pośrednictwem pymongo?