इस प्रकार के संचालन के लिए आपको $addToSetका उपयोग नहीं करना चाहिए कोड>
बेशक $inc
इस पर ध्यान दिए बिना होगा कि सरणी में कुछ भी जोड़ा गया था ("सेट") या नहीं।
इसके बजाय, $ne
से सरणियों का परीक्षण करें
क्वेरी में ऑपरेटर:
db.collection.update(
{ "unique_array": { "$ne": 18 } }, <-- existing element
{
"$push": { "unique_array": 18 },
"$inc": { "size_of_array": 1 }
}
)
वही सरणी सदस्यों को हटाने के लिए जाता है, लेकिन निश्चित रूप से इस बार आप समानता के साथ उपस्थिति के लिए परीक्षण करते हैं:
db.collection.update(
{ "unique_array": 18 }, <-- existing element
{
"$pull": { "unique_array": 18 },
"$inc": { "size_of_array": -1 }
}
)
चूंकि क्वेरी की स्थिति का मिलान होना चाहिए, यदि जोड़ते समय सरणी तत्व पहले से मौजूद था तो कोई मेल नहीं है और $पुश
या $inc
ऑपरेशन चलाए जा रहे हैं। और $pull
के लिए भी यही सच है
मामला जहां तत्व सरणी में मौजूद नहीं है।