Няма нищо лошо в това, което основно се опитвате, но може би единственото пояснение тук е често срещаното погрешно схващане, че имате нужда от оператори като $nin или $in при заявка за масив.
Също така наистина трябва да направите тук е основно съответствие с неравенството с $ne :
Person.find({ "groups": { "$ne": group._id } })
Операторите „масив“ не са за „цели на масив“, а за предоставяне на „списък“ с условия за тестване в удобна форма.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Затова просто използвайте нормални оператори за единични условия и запазете $in и $nin за където искате да тествате повече от едно условие срещу една стойност или списък. Значи е точно обратното.
Ако трябва да предадете "списък" с аргументи, където "никой" от тези в предоставения списък съвпада със съдържанието на масива, тогава обръщате логиката с $not оператор и $all оператор:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
Това означава, че „нито един от предоставения списък“ не присъства в масива.