Вы должны использовать «и» и «или» вместе.
У вас будет два подзапроса:
1. И (существует и mainID совпадает)
2. (соответствие subID)
Два подзапроса выше будут ORed.
Mongo неявно использует оператор '$ and', если вы используете оператор в том же поле. Таким образом, запрос может быть еще более упрощен до:
Test.findOne({
$or:[
{ 'mainId' : { $exists : true, $eq: data.mainId } },
{ 'subId' : data.subId }
] } );
Оператор $ eq означает равный.