2012-12-08 14 views
7
Documents.update(
    {_id: Session.get("current_document_id")}, 
    {$push: {schema: {type: "text", size: size, name: name, label: label}}} 
); 

में निहित में निहित ऊपर क्वेरी एक उल्का संग्रह, और MongoDB दस्तावेज में 'db.documents.update' को 'Documents.update' नक्शे (http है .mongodb.org/मैनुअल/अनुप्रयोगों/अद्यतन /)। उस क्वेरी के साथ मैं मुख्य दस्तावेज़ के अंदर एक स्कीमा दस्तावेज़ जोड़ सकता हूं। सहायक दस्तावेज़ों एक सरणी में जमा हो जाती:अद्यतन एक subdocument एक सरणी एक MongoDB दस्तावेज़

Document: 
    schema: 
    array: 
     {type: "text", size: 6, name: "first_name", label: "First name"}, 
     {type: "text", size: 6, name: "last_name", label: "Last name"} 

मैं इस प्रश्न के साथ सहायक दस्तावेज़ों का नाम और आकार विशेषताओं को संशोधित करना चाहते:

Documents.update(
    {_id: Session.get("current_document_id"), 'schema' : "first_name"}, 
    {$push: {schema: {type: "text", size: 7, name: name, label: "First Name2"}}} 
); 

लेकिन उस आपरेशन सीधे स्कीमा के तहत एक नया वस्तु संलग्न करें और हटाता है सरणी:

Document: 
    schema: 
     {type: "text", size: 7, name: "first_name", label: "First Name2"} 

इस समस्या से बचने वाले गुणों को बदलने के लिए मैं क्वेरी को कैसे संशोधित कर सकता हूं? क्वेरी बाद मैं इस दस्तावेज़ करना चाहते हैं:

Document: 
    schema: 
    array: 
     {type: "text", size: 7, name: "first_name", label: "First name2"}, 
     {type: "text", size: 6, name: "last_name", label: "Last name"} 
+0

स्कीमा अंक में ऑब्जेक्ट की श्रृंखला के लिए – rtacconi

उत्तर

19

आप एक $set आपरेशन $ स्थितीय ऑपरेटर का उपयोग करता है का उपयोग कर सरणी तत्व इस तरह चयनकर्ता में मिलान की पहचान करने के लिए एक मौजूदा सरणी तत्व अद्यतन कर सकते हैं:

Documents.update(
    {_id: Session.get("current_document_id"), 'schema.name': "first_name"}, 
    {$set: {'schema.$': {type: "text", size: 7, name: name, label: "First Name2"}}} 
); 

यह स्थान ले लेगा एक साथ मिलान schema तत्व $set वस्तु में शामिल थे।

यदि आप केवल लक्षित schema तत्व के व्यक्तिगत फ़ील्ड अपडेट करना चाहते हैं, तो आप डॉट नोटेशन का उपयोग कर सकते हैं।

Documents.update(
    {_id: Session.get("current_document_id"), 'schema.name': "first_name"}, 
    {$set: {'schema.$.size': 7, 'schema.$.name': name}} 
); 
+0

धन्यवाद यह काम करता है, लेकिन मैं इस त्रुटि हो रही है: उदाहरण के लिए, केवल size और name फ़ील्ड अपडेट कर https://gist.github.com/4243896। मुझे कारण खोजने के लिए बाद में देखेंगे। त्रुटि बहुत व्याख्यात्मक नहीं है। – rtacconi

+1

@rtacconi ऐसा लगता है कि '$' स्थितित्मक ऑपरेटर उल्का के minimongo में समर्थित नहीं है: https://github.com/meteor/meteor/issues/153 – JohnnyHK

+0

हाँ आप सही हैं :-) – rtacconi