2014-10-08 12 views
5

मोंगोडीबी में, आप अप्सर्ट करने के लिए db.collection.save({_id:'abc'}, objectToSave) का उपयोग कर सकते हैं।MongoDB db.collection.save ऑब्जेक्ट ओवरराइट करें जब मौजूदा

के

{_id:'abc', field1:1, field2:2}; 

मेरे संग्रह में नीचे के रूप में objectToSave परिभाषित करते हैं, मैं पहले से ही नीचे के रूप में एक ही _ id मूल्य के साथ एक दस्तावेज़ है है को बचाने के समारोह ऊपर में मौजूदा दस्तावेज़ का स्थान ले लेगा

{_id:'abc', field3:3}; 

{_id:'abc', field1:1, field2:2}; 

जो मैं चाहता हूं वह $ सेट ऑपरेशन करना है

{_id:'abc', field1:1, field2:2, field3:3}; 

क्या यह सहेजने के कार्य में प्राप्त किया जा सकता है या मुझे अलग-अलग अपडेट स्टेटमेंट लिखना है?

ध्यान दें कि ऑब्जेक्ट ToSave के फ़ील्ड गतिशील हैं। मैं जिस भाषा का उपयोग कर रहा हूं वो नोड.जेएस है।

उत्तर

4
db.collection.update({'_id':'abc'},{$set:{field1:1,field2:2}},{upsert:true}) 

आप क्या चाहते हैं करना चाहिए:

  1. यह upserts, इसलिए यदि दस्तावेज़ अभी तक मौजूद नहीं है, यह {_id:'abc',field1:1,field2:2} के रूप में बनाया और कुशलता से इसलिए है, क्योंकि एक सूचकांक जो
  2. मौजूद होना चाहिए प्रयोग किया जाता है
  3. यदि दस्तावेज़ पहले से मौजूद है, फ़ील्ड फ़ील्ड 1 और फ़ील्ड 2 अद्यतन कथन में मान पर सेट हैं।
  4. यदि दस्तावेज़ में से कोई भी फ़ील्ड मौजूद है, तो इसे ओवरराइट कर दिया जाएगा।

चूंकि आपने यह नहीं बताया कि आप किस भाषा का उपयोग करते हैं: सादा mongoDB में, save फ़ंक्शन नहीं है। संस्थाओं के नए और लगातार संस्करणों को मर्ज करने की स्पष्ट आवश्यकता काफी असामान्य है, इसलिए हाँ, मुझे लगता है कि आपको एक कस्टम फ़ंक्शन लिखना है।

+0

मार्कस, मैं एक बात का उल्लेख करना भूल गया, ऑब्जेक्ट में फ़ील्ड की सूची अनिश्चित है। इसलिए मैं अद्यतन का उपयोग नहीं कर सकता और विशिष्ट फ़ील्ड के साथ $ सेट का उपयोग नहीं कर सकता। मैं नोड.जेएस का उपयोग कर रहा हूँ – Lee

+0

ऐसा क्यों? आप खेतों की मनमानी संख्या पर सेट का उपयोग कर सकते हैं। एक ऑब्जेक्ट बनाएं, इसे '$ set' के मान के रूप में पास करें और आप जाने के लिए अच्छे हैं। –

+0

ऑब्जेक्ट टोवसेव में _id फ़ील्ड है और _id मान संग्रह में मौजूद होने की पुष्टि नहीं है। $ सेट _id फ़ील्ड पर अपडेट की अनुमति नहीं देगा। – Lee

संबंधित मुद्दे