sql >> Databáze >  >> NoSQL >> MongoDB

Jak použít $arrayElemAt a odstranit pole z tohoto prvku v MongoDB $projection?

Toto je ze syntaxe arrayElemAt

To znamená, že si můžete vytvořit své prvky pole, jak chcete. Ve vašem případě chcete pouze jméno. Takže by to mělo fungovat:

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

Sledujte UPDATE :bylo dotazováno, jak přidat další vlastnosti nad name . Zde je projekt:

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

Druhá kontrola jak se Drag0 ptal v komentářích:Pokud výše uvedené není dost dobré, protože výsledky generují pole user:[] o velikosti 1 místo uživatele objektu:{} lze použít následující.

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



  1. MongoDB.Driver.Builders jak seskupit a získat průměr

  2. Aktualizace pole dokumentu v mongo na základě hodnoty jiného pole

  3. Existuje nějaké omezení počtu argumentů, které zvládnou příkazy redis, jako je ZADD nebo HMGET?

  4. Instalace klienta/ovladače PHP 7 MongoDB?