तो यहां कहने वाली पहली बात यह है कि $elemMatch
आपके मामले में आवश्यक नहीं है क्योंकि आप केवल एक ही सरणी संपत्ति पर मिलान करना चाहते हैं। आप उस ऑपरेटर का उपयोग तब करते हैं जब आपको अपनी शर्तों से मेल खाने के लिए एक ही सरणी तत्व से "दो या अधिक" गुणों की आवश्यकता होती है। अन्यथा आप मानक के रूप में केवल "डॉट नोटेशन" का उपयोग करें।
यहां दूसरा मामला $push
. के साथ है , जहां उस विशेष ऑपरेटर का अर्थ सरणी में तत्वों को "जोड़ना" है। आपके मामले में आप बस "अपडेट" करना चाहते हैं, इसलिए यहां सही ऑपरेटर है $set
:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
तो स्थितीय $
ऑपरेटर यहाँ है जो सरणी तत्व से "मिला सूचकांक" से मेल खाता है और $set
. की अनुमति देता है उस "स्थिति" से मेल खाने वाले तत्वों को "बदलने" के लिए ऑपरेटर।