title: Return Sub-document only when matched but keep empty arrays
body: <p>I have a collection set with documents like :</p>
  
  <pre><code>{
      "_id": ObjectId("57065ee93f0762541749574e"),
      "name": "myName",
      "results" : [ 
          {
              "_id" : ObjectId("570e3e43628ba58c1735009b"),
              "color" : "GREEN",
              "week" : 17,
              "year" : 2016
          }, 
          {
              "_id" : ObjectId("570e3e43628ba58c1735009d"),
              "color" : "RED",
              "week" : 19,
              "year" : 2016
          }
      ]
  }
  </code></pre>
  
  <p>I am trying to build a query witch alow me to return all documents of my collection but only select the field 'results' with subdocuments if week > X and year > Y.</p>
  
  <p>I can select the documents where week > X and year > Y with the aggregate function and a $match but I miss documents with no match.
  So far, here is my function :</p>
  
  <pre><code>query = ModelUser.aggregate(
      {$unwind:{path:'$results', preserveNullAndEmptyArrays:true}},
      {$match:{
          $or: [
              {$and:[
                  {'results.week':{$gte:parseInt(week)}},
                  {'results.year':{$eq:parseInt(year)}}
              ]},
              {'results.year':{$gt:parseInt(year)}},
              {'results.week':{$exists: false}}
      {$group:{
          _id: {
              _id:'$_id',
              name: '$name'
          },
          results: {$push:{
              _id:'$results._id',
              color: '$results.color',
              numSemaine: '$results.numSemaine',
              year: '$results.year'
          }}
      }},
      {$project: {
          _id: '$_id._id',
          name: '$_id.name',
          results: '$results'
  );
  </code></pre>
  
  <p>The only thing I miss is : I have to get all 'name' even if there is no result to display.</p>
  
  <p>Any idea how to do this without 2 queries ?</p>