$ и не будет выполнять эту работу, поскольку 2-й $ или не будет проверяться, если первый не пройден
со страницы руководства Mongo:
Оператор $ and использует оценку короткого замыкания. Если первое выражение (например,) оценивается как ложное, MongoDB не будет оценивать оставшиеся выражения.
Вложенный $ или как следует сделать трюк:
db.things.find ({$ or: [{$ or: [{'a': 1}, {'b': 2}]}, {$ or: [{'a': 2}, {'b': 3}]}]})