किसी सरणी फ़ील्ड पर एक अद्वितीय अनुक्रमणिका लागू करती है कि एक ही मान एक से अधिक दस्तावेज़ की सरणियों में प्रकट नहीं हो सकता है संग्रह में, लेकिन एक ही दस्तावेज़ की सरणी में एक ही मान को एक से अधिक बार प्रदर्शित होने से नहीं रोकता है। इसलिए जब आप इसके बजाय सरणी में तत्व जोड़ते हैं तो आपको विशिष्टता सुनिश्चित करने की आवश्यकता होती है।
$addToSet
. का उपयोग करें ऑपरेटर किसी सरणी में मान जोड़ने के लिए केवल तभी मान सकता है जब मान पहले से मौजूद न हो।
Group.updateOne({name: 'admin'}, {$addToSet: {users: userOid}}, ...
हालांकि, अगर users
सरणी में कई गुणों वाली वस्तुएं होती हैं और आप उनमें से केवल एक पर विशिष्टता सुनिश्चित करना चाहते हैं (uid
इस मामले में), तो आपको एक और तरीका अपनाने की जरूरत है:
var user = { uid: userOid, ... };
Group.updateOne(
{name: 'admin', 'users.uid': {$ne: user.uid}},
{$push: {users: user}},
function(err, numAffected) { ... });
वह क्या करता है $push
. के योग्य है अपडेट केवल तभी होगा जब user.uid
uid
. में पहले से मौजूद नहीं है users
. के किसी भी तत्व का क्षेत्र . तो यह $addToSet
. की नकल करता है व्यवहार, लेकिन केवल uid
. के लिए ।