title: Aggregate documents where objects in array matches multiple conditions
body: <p>I have a collection with documents similar to such:</p>
  
  <pre class="lang-json prettyprint-override"><code>{
      "_id": ObjectId("xxxxx"),
      "item": [
          { "property": ["attr1", "+1"] },
          { "property": ["attr2", "-1"] }
      ]
  }
  
  {
      "_id": ObjectId("xxxxy"),
      "item": [
          { "property": ["attr1", "-1"] },
          { "property": ["attr2", "0"] }
      ]
  }
  
  {
      "_id": ObjectId("xxxxz"),
      "item": [
          { "property": ["attr1", "0"] },
          { "property": ["attr2", "+1"] }
      ]
  }
  </code></pre>
  
  <p>Preferably using an aggregation pipeline, is there any way to match the document <em>if and only if</em> any one of the properties match <em>more than one</em> condition?</p>
  
  <p>For example, I want a query where one object in the array matches both of these conditions:</p>
  
  <pre><code>("item.property": "attr1") AND ("item.property": /^\+/)
  </code></pre>
  
  <p>That is, a single property where it contains "attr1" and an element that starts with "+".</p>
  
  <p>However, using my current query that looks like this:</p>
  
  <pre><code>collection.aggregate(
      { $match:
          { $and: 
              [
                  { "item.property": "attr1" },
                  { "item.property": /^\+/ }
              ]
          }
      }
  </code></pre>
  
  <p>This would match both the first and last document because both contain a property with "attr1" and an element that stats with "+". However, I do not want this query to match the last document, since the element that starts with "+" does not belong to the same object in the array.</p>
  
  <p>Is there any way to achieve this behavior using the aggregation framework?</p>