title: Mongodb aggregation project after lookup
body: <p>I am doing MongoDB aggregation. I want to lookup two collections then project only desired field in nested array.</p>
  
  <p>Two collections to lookup:</p>
  
  <blockquote>
    <p>db.pitcher.find().pretty()</p>
  </blockquote>
  
  <pre><code>{
           "_id" : ObjectId("59b22eeef224252e6c7eeaf6"),
          "userId" : "a0",
          "name" : "test50000",
          "index" : 50000,
          "position" : "SP",
          "order" : 0,
          "gameRecord" : [
                  {
                          "seasonIndex" : 2017251,
                          "gameIndex" : 1,
                          "ERA" : 3.00,
                  },
          {
                          "seasonIndex" : 2017251,
                          "gameIndex" : 2,
                          "ERA" : 4.50,
                  }
          ]
         }
  </code></pre>
  
  <blockquote>
    <p>db.gameResult.find().pretty()</p>
  </blockquote>
  
  <pre><code>{
          "_id" : ObjectId("59b22b7dac48252e6c7eeaf6"),
          "seasonIndex" : 2017251,
          "gameIndex" : 1,
          "away" : "a9",
          "home" : "a0",
          "awayScore" : 9,
          "homeScore" : 4,
          "awayPitcherList" : [
                  50180
          ],
          "homePitcherList" : [
                  50000,
                  50049,
                  50048,
                  50047
          ]
        }
  </code></pre>
  
  <p>Aggregate query:</p>
  
  <pre><code>&gt; db.gameResult.aggregate([
  {
      $match : {gameIndex : 1 ,home : "a0"}
  },
  {
      $lookup:
          {
          from: "pitcher",
          localField : "awayPitcherList",
          foreignField : "index",
          as: "awayPitcherList"
          }
  },
  {
      $lookup:
          {
          from: "pitcher",
          localField : "homePitcherList",
          foreignField : "index",
          as: "homePitcherList"
          }
  }
  ]).pretty()
  </code></pre>
  
  <p>Finally desired Output:</p>
  
  <pre><code>"_id" : ObjectId("59b22b7dac48252e6c7eeaf6"),
  "seasonIndex" : 2017251,
  "gameIndex" : 1,
  "away" : "a9",
  "home" : "a0",
  "awayScore" : 9,
  "homeScore" : 4,
  
  "awayPitcherList" : [
      {
      "name" : "test50180",
      "gameRecord" : [
          {
                  "seasonIndex" : 2017251,
                  "gameIndex" : 1,
                  "ERA" : 3.00,
          }
  ]
  ],
  "homePitcherList" : [
               {
      "name" : "test50000",
      "gameRecord" : [
          {
                  "seasonIndex" : 2017251,
                  "gameIndex" : 1,
                  "ERA" : 3.00,
          }
  ],
               {
      "name" : "test50049",
      "gameRecord" : [
          {
                  "seasonIndex" : 2017251,
                  "gameIndex" : 1,
                  "ERA" : 3.00,
          }
  ],
               {
      "name" : "test50048",
      "gameRecord" : [
          {
                  "seasonIndex" : 2017251,
                  "gameIndex" : 1,
                  "ERA" : 3.00,
          }
  ],
              {
      "name" : "test50047",
      "gameRecord" : [
          {
                  "seasonIndex" : 2017251,
                  "gameIndex" : 1,
                  "ERA" : 3.00,
          }
  ]
  ]
  </code></pre>
  
  <p>I want name and gameRecord which contains gameIndex of (in this case) 1 only.</p>
  
  <p>Please improve my aggregate query. 
  Many many tnx for Spring code if you have one. </p>