MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да използвате $arrayElemAt и да премахнете полета от този елемент в MongoDB $projection?

Това е от синтаксиса на arrayElemAt

Което означава, че можете да конструирате вашите елементи от масива, както искате. Във вашия случай искате само името. Така че това трябва да работи:

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

Последваща АКТУАЛИЗАЦИЯ :беше попитано как да се добавят допълнителни свойства върху name . Ето проекта:

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

Второ проследяване както Drag0 попита в коментарите:Ако горното не е достатъчно добро, защото резултатите генерират user:[] масив с размер 1 вместо обект user:{} може да се използва следното.

{  
  $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. Как да върнете само стойността в MongoDB

  2. Актуализация на MongoDB MapReduce на място как да

  3. Управление на журналирането в MongoDB

  4. Мигриране на MongoDB към DynamoDB, част 1

  5. Свързване и създаване на MongoDB Joins с помощта на SQL:Част 2