2012-01-15 19 views
6

का उपयोग कर स्वयं संदर्भ अद्यतन अपडेट मुझे आश्चर्य है कि मोंगोडीबी में स्वयं संदर्भ अद्यतन करने का कोई तरीका है, तो आप $ सेट क्वेरी पर ऑब्जेक्ट के पैरा का उपयोग कर सकते हैं।मोंगोडीबी

> db.labels.save({"name":"label1", "test":"hello"}) 
> db.labels.save({"name":"label2", "test":"hello"}) 
> db.labels.save({"name":"label3", "test":"hello"}) 
> db.labels.find() 
{ "_id" : ObjectId("4f1200e2f8509434f1d28496"), "name" : "label1", "test" : "hello" } 
{ "_id" : ObjectId("4f1200e6f8509434f1d28497"), "name" : "label2", "test" : "hello" } 
{ "_id" : ObjectId("4f1200eaf8509434f1d28498"), "name" : "label3", "test" : "hello" } 

मैंने देखा कि आप क्वेरी के $ पर इस वाक्य विन्यास का उपयोग कर सकते हैं::

db.labels.update: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

> db.myCollection.find({ a : { $gt: 3 } }); 
> db.myCollection.find({ $where: "this.a > 3" }); 
> db.myCollection.find("this.a > 3"); 
> f = function() { return this.a > 3; } db.myCollection.find(f); 

तो, मैं के साथ की कोशिश की यहाँ एक उदाहरण है ({"test": "hola"}, {$ set: {"test": this.name})

लेकिन यह काम नहीं किया।

की उम्मीद परिणाम है:

{ "_id" : ObjectId("4f1200e2f8509434f1d28496"), "name" : "label1", "test" : "label1" } 
{ "_id" : ObjectId("4f1200e6f8509434f1d28497"), "name" : "label2", "test" : "label2" } 
{ "_id" : ObjectId("4f1200eaf8509434f1d28498"), "name" : "label3", "test" : "label3" } 

किसी भी विचार? अग्रिम धन्यवाद

उत्तर

18

वर्तमान में ऐसा करने का कोई सीधा तरीका नहीं है। लेकिन आप इसे

db.labels.find({"test":"hola"}).forEach(function (doc) { 
      doc.test = doc.name; 
      db.labels.save(doc); 
    }) 
+0

प्रतिक्रिया रमेशवेल के लिए धन्यवाद कर सकते हैं। मैं Mongoid का उपयोग कर रहा हूँ, तो मैं परिणामों पर लूप होगा और इसे पुराने मूल्य से बचाऊंगा। मैं प्रदर्शन के बारे में चिंतित हूं। कोई सिफारिश? – fertapric

+0

@fertapric, क्षमा करें nope :(मुझे डर है कि एकमात्र तरीका है। – RameshVel

+0

@RameshVel क्या यह अभी भी मोंगो डीबी के वर्तमान संस्करण के लिए सच है? – Cartesius00