Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-19153

Conditionally push $match before $project

    XMLWordPrintableJSON

Details

    • Fully Compatible
    • Query 2016-09-19, Query 2016-10-10

    Description

      I was looking at the optimizing aggregation pipelines docs page and didn't see this one listed.

      This is only possible if the subsequent $match doesn't use any computed fields, but there could be a large win with regards to index usage if you could move the $match prior to a $project.

      For example:

      { $project: { a: 1, b: 1, newField: { $add: ["$a", "$b"] } } },
      { $match: { a : { $gt: 10 } }
      

      is the same as

      { $match: { a : { $gt: 10 } },
      { $project: { a: 1, b: 1, newField: { $add: ["$a", "$b"] } } }
      

      because the $match is only using fields that exist in the original document.

      Attachments

        Issue Links

          Activity

            People

              david.storch@mongodb.com David Storch
              craig.wilson@mongodb.com Craig Wilson
              Votes:
              1 Vote for this issue
              Watchers:
              11 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: