2013-02-03 17 views
7

में mongoosejs का उपयोग करके एकाधिक रिकॉर्ड अपडेट करें मुझे mongoosejs और नोड का उपयोग करके एकाधिक रिकॉर्ड अपडेट करने में समस्या हो रही है। किसी कारण से, मैं केवल एक ही रिकॉर्ड अपडेट करता हूं, भले ही एकाधिक मैच। मैंने यह भी देखा है कि कॉलबैक .update() के बाद नहीं होगा। मुझे कोई त्रुटि संदेश नहीं मिल रहा है। यहाँ क्या चल रहा है?नोड

Page.find({status:'queued'}) 
    .limit(queue_limit-queue.length) 
    .update({ status: 'active' },{ multi: true },function(err,num){ 
     console.log("updated "+num); 
     //this callback will never fire, but a single record will be updated and marked as active.                         
    }); 

उत्तर

14

Query#update एक options पैरामीटर को स्वीकार नहीं करता है, लेकिन Model.update करता है। तो अगर आप के रूप में इस पुनर्लेखन करना चाहते हैं:

Page.update({status:'queued'}, {status: 'active'}, {multi: true}, 
    function(err, num) { 
     console.log("updated "+num); 
    } 
); 

मुझे यकीन है कि क्या आप श्रृंखला में limit कॉल के साथ क्या करने की कोशिश कर रहे थे नहीं कर रहा हूँ, लेकिन आप उपयोग नहीं कर सकते कि एक अद्यतन में।

अद्यतन

ऊपर क्वेरी जहां {status: 'queued'} सभी डॉक्स अद्यतन करेगा। update के साथ आपके एकमात्र विकल्प केवल पहले मिलान वाले {multi: false} या सभी मिलान {multi: true} हैं। की तरह आप एक समय में अपने कतार एक बंद डॉक्स लेने के लिए और findOneAndUpdate बजाय update करने के लिए स्विच करने के लिए ताकि आप डॉक में आप 'queued' से 'active' को नवीनीकृत किया है के लिए उपयोग किया चीजों rework की जरूरत

लग रहा है।

+0

सीमा का बिंदु इसे बनाना है इसलिए मैं केवल 10 रिकॉर्ड अपडेट करता हूं। आपकी क्वेरी ऐसा लगता है कि यह '{status: 'queued'}' के साथ सब कुछ अपडेट करेगा। मुझे अपने उदाहरण में उपयोग किए जाने वाले पहले कॉलबैक की भी आवश्यकता है यह देखने के लिए कि मैं कौन से रिकॉर्ड बदल रहा हूं (और न केवल प्रभावित संख्या)। – devnill

+0

@devnill mongodb अभी तक सीमित अपडेट का समर्थन नहीं करता – Sammaye

+0

@devnill यह सही है। एक विकल्प के लिए अद्यतन देखें। – JohnnyHK