The selector phase tries to turn expressions into MongoDB selectors -- i.e.
The selector phase tries to turn expressions into MongoDB selectors -- i.e. Mongo query expressions. Selectors are only used for the filtering pipeline op, so it's quite possible we build more stuff than is needed (but it doesn't matter, unneeded annotations will be ignored by the pipeline phase).
Like the expression op phase, this one requires bson field annotations.
Most expressions cannot be turned into selector expressions without using the "$where" operator, which allows embedding JavaScript code. Unfortunately, using this operator turns filtering into a full table scan. We should do a pass over the tree to identify partial boolean expressions which can be turned into selectors, factoring out the leftovers for conversion using $where.