में db.eval() का मोंगोडीबी प्रदर्शन दस्तावेज़ों पर अद्यतन संचालन करने की आवश्यकता है जिसमें मुझे किसी सरणी में कुछ मान घुमाने की आवश्यकता है। मोंगोडीबी अपडेट क्वेरी वर्तमान में आपको $pop
और फिर $push
अपडेट में उसी फ़ील्ड पर अनुमति नहीं देती है। ऑनलाइन सलाह के बाद, मैंने फैसला किया कि db.eval()
मेरे उपयोग के लिए सबसे उपयुक्त होगा क्योंकि यह परमाणुता सुनिश्चित करता है और जो ऑपरेशन मैं कर रहा हूं वह बहुत छोटा है, इसलिए यह बहुत लंबे समय तक डीबी को लॉक नहीं करेगा।जावास्क्रिप्ट खोल बनाम pymongo
यहाँ कुछ का एक उदाहरण मैं ऐसा करने की कोशिश कर रहा हूँ:
db.eval(function (id, newVal) {
doc = db.collection.findOne({_id: id});
doc.values.shift();
doc.values.push(newVal);
db.collection.save(doc);
}, id, newVal);
और यह पूरी तरह से काम करता है! मैं तो MongoDB देखने के लिए कितने मिलीसेकेंड eval()
आदेश ले रहा था की रूपरेखा सक्षम है और मैं हमेशा कम है कि 1 millisecond के परिणाम प्राप्त करेंगे:
> db.system.profile.find({op: "command"}, {"millis": 1})
{ "millis" : 0 }
{ "millis" : 0 }
...
यह सिवाय इसके कि अपने आवेदन अजगर में है, मेरे लिए अच्छी खबर है, तो मैं eval()
आदेशों को करने के लिए एक पिमोंगो क्लाइंट का उपयोग कर रहा हूं। , अब (ऊपर डेटा मोंगो खोल से है) लेकिन जब मैं pymongo का उपयोग कर समान eval()
कमांड चलाने:
conn = pymongo.Connection(mongo_server_hostname)
db = conn.my_db
db.eval("""function (id, newVal) {
doc = db.collection.findOne({_id: id});
doc.values.shift();
doc.values.push(newVal);
db.collection.save(doc);
}""", id, new_val)
मैं बहुत अलग रूपरेखा परिणाम प्राप्त:
> db.system.profile.find({op: "command"}, {"millis": 1})
{ "millis" : 13 }
{ "millis" : 14 }
{ "millis" : 14 }
...
वहाँ कुछ मौलिक चलाने के बारे में अलग अलग है उसी eval()
मोंगो शैल और पिमोंगो के भीतर से आदेश देता है जिसके परिणामस्वरूप सर्वर पिमोंगो से समान आदेश चलाने के लिए 14ms अधिक लेता है?
क्या आप अपना पाइथन कोड समतुल्य समझा सकते हैं? आप पिमोंगो से eval कैसे बुला रहे हैं? क्या यह उसी प्रकार के 'eval' ताले खोल लेता है जो खोल लेता है? – WiredPrairie
प्रश्न संपादित किया गया। मुझे लगता है कि एक ही eval कमांड में pymongo eval() परिणाम। जो कुछ भी मैंने पार नहीं किया है, वह मुझे अन्यथा विश्वास करने के लिए प्रेरित करता है। – jlhawn
आपके मोंगोडीबी और पायमोंगो संस्करण क्या हैं? उत्तर writeconcern सेटिंग्स में हो सकता है ... –