आप जो मूल रूप से प्रयास कर रहे हैं, उसमें कुछ भी गलत नहीं है, लेकिन शायद यहां एकमात्र स्पष्टीकरण आम गलत धारणा है कि आपको $nin जैसे ऑपरेटरों की आवश्यकता है। या $in किसी सरणी को क्वेरी करते समय।
इसके अलावा आपको यहां वास्तव में $ne . के साथ एक बुनियादी असमानता मिलान करने की आवश्यकता है :
Person.find({ "groups": { "$ne": group._id } })
"सरणी" ऑपरेटर "सरणी लक्ष्य" के लिए नहीं बल्कि सुविधाजनक रूप में परीक्षण करने के लिए शर्तों की "सूची" प्रदान करने के लिए हैं।
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
तो केवल एकल स्थितियों के लिए सामान्य ऑपरेटरों का उपयोग करें, और $in save बचाएं और $nin जहां आप किसी एकल मान या सूची के विरुद्ध एक से अधिक शर्तों का परीक्षण करना चाहते हैं। तो यह बिल्कुल उल्टा है।
यदि आपको तर्कों की "सूची" पारित करने की आवश्यकता है, जहां प्रदान की गई सूची में से "कोई नहीं" सरणी की सामग्री से मेल खाता है तो आप तर्क को $not के साथ उलट देते हैं ऑपरेटर और $all ऑपरेटर:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
तो इसका मतलब है कि प्रदान की गई "कोई भी सूची" सरणी में मौजूद नहीं है।