sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur använder man $arrayElemAt och tar bort fält från det elementet i MongoDB $projection?

Detta är från syntaxen för arrayElemAt

Vilket innebär att du kan konstruera dina arrayelement hur du vill. I ditt fall vill du bara ha namnet. Så det här borde fungera:

[{
  $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ölj upp UPPDATERING :det frågades hur man kan göra ytterligare egenskaper ovanpå name . Här är projektet:

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

Andra uppföljningen som Drag0 frågade i kommentarerna:Om ovanstående inte är tillräckligt bra eftersom resultaten genererar en användare:[] array av storlek 1 istället för en objektanvändare:{} kan följande användas.

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



  1. Kan MongoDB använda ett index när man kontrollerar att det finns ett fält med operatören $exists?

  2. mongodb satte null i uppdatering

  3. Cacha tweets med Node.js, Redis och Socket.io

  4. Hur hittar man nscanned i mongoose?