The project stage allows the user to specify which fields (and nested fields) should be retained using what the documentation calls an "expression object", where if certain fields are set to some value, corresponding fields are removed, added, or modified. This is convenient because of its compact syntax, though it is arguably confusing in a number of ways.
Our API should provide similar functionality and convenience for the project stage.