Для конкретного случая, который вы используете в своем вопросе, вы можете сделать:
Model.any_of({ flagged: false, saved: true }, { flagged: true, saved: true }, { flagged: false, saved: false } )
Однако, как вы говорите в своих комментариях, вы на самом деле ищете общее решение. AFAIK, нет никакого способа сделать это в Mongoid или в MongoDB.
Причина этого, скорее всего, заключается в том, что вы не можете делать соединения в запросе MongoDB. Например, традиционным способом SQL для получения отрицания запроса может быть:
SELECT * FROM mytable t
WHERE t.id NOT IN ( SELECT t2.id FROM mytable t2 WHERE t2.condition = true )
Или, чтобы избежать проблемы выбора N + 1
SELECT t.*, t2.id FROM mytable t
OUTER JOIN mytable t2 ON ( t1.id AND t2.condition = true )
WHERE t2.id = NULL
Обе они основаны на том, чтобы каким-то образом объединить два выбора, чего в Монго вы не можете сделать.
Единственный другой способ - это как-то инвертировать логику, как я, чтобы получить ответ выше на ваш конкретный пример. Я думаю, что было бы очень плохой идеей попросить Mongo сделать это автоматически, поскольку в результате вы получите код, генерирующий произвольно сложные запросы, которые вы не сможете контролировать и не сможете оптимизировать.