Actually, if @jian-wu's problem in #596 has to do with extra criteria being injected into expressions when they should only appear on the top-most query, perhaps Expr should simply be calling `DocumentPersister::prepareQueryOrNewObj()` (currently private) instead of `DocumentPersister::prepareQuery()`. The latter method is what turns scalars into an `_id` match and adds filter or discriminator criteria, neither of which should be necessary in an expression (I think).