2012-02-05 4 views
7

के साथ मोंगोडीबी संग्रह में एक फ़ील्ड बढ़ाना मैं मोंगोस के माध्यम से अपने मोंगोडीबी डेटाबेस में संग्रह में एक मूल्य बढ़ाने की कोशिश कर रहा हूं। यह नेवला वेबसाइट पर दिखाया डेमो कोड है:मोंगोस

var conditions = { name: 'borne' } 
    , update = { $inc: { visits: 1 }} 
    , options = { multi: true }; 

Model.update(conditions, update, options, callback) 

और मैं कुछ इस तरह है:

var conditions = { "uniqueId" : itemId }; 
var update; 
if(increase) 
    update = {$inc : {inStock : 1}}; 
else 
    update = {$dec : {inStock : 1}}; 
Item.update(conditions, update, {}, callback); 

आप देख सकते हैं वहाँ नेवला की वेबसाइट कोड से ज्यादा अंतर नहीं है।

समस्या यह है कि जब कोड के इस टुकड़े निष्पादित किया जाता है, मैं अपने संग्रह के लिए एक क्षेत्र $dec कहा जाता है (या $inc) में होने जो फार्म {inStock : 1} में एक क्षेत्र के रूप में एक वस्तु है पहुंचते हैं। मैं सिर्फ संग्रह की इनस्टॉक प्रविष्टि में वृद्धि करना चाहता हूं। स्कीमा में मेरे पास है:

var ItemToSell = new Schema({ 
    uniqueId : { type: Number, index: true } 
    , name  : String 
    , type  : String 
    , inStock : Number 
}); 

क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं? बहुत बहुत धन्यवाद।

उत्तर

3

ए) सुनिश्चित करें कि आप मोंगोस अद्यतित हैं। पुराने संस्करण बहुत Model.update कार्यों पर छोटी गाड़ी क्योंकि नेवला अनुमान लगाने के लिए जब आप केवल एक नया वस्तु है, जो मामले में यह एक $set आपरेशन में अपने update वस्तु बदल जाता है से गुजर रहे हैं का प्रयास कर रहे थे।

बी) अपने फ़ंक्शन कॉल से खाली {} को निकालने का प्रयास करें। यह वैकल्पिक है, और वास्तविक विकल्पों की बजाय खाली वस्तु को पार करके, आप मोंगोस को { safe: false } विकल्प सेट करने में भ्रमित कर सकते हैं, जो आपकी समस्या का कारण बन सकता है। मैंने यह पुष्टि करने के लिए स्रोत कोड की जांच नहीं की है कि यह समस्या हो सकती है, लेकिन शायद यह एक कोशिश के लायक है।

+0

उत्तर के लिए धन्यवाद। रिक्त स्थान को हटाकर '{} 'मैंने समस्या को हल किया जो' {"$ dec": {"inStock": 1}} को संग्रह में जोड़ा जाना था। आप इस तथ्य के साथ भी सही थे कि मैं मोंगोस के पुराने संस्करण का उपयोग कर रहा था लेकिन फिर भी मैंने इस मुद्दे को हल नहीं किया। अब ऐसा लगता है कि यह संग्रह में कुछ भी नहीं करता है। – Masiar

+4

ठीक है मैंने इस मुद्दे को हल किया। कॉलबैक फ़ंक्शन के 'त्रुटि' इनपुट ने अब कुछ दिया है कि मैं Mongoose के अपने संस्करण को अद्यतन करता हूं। मैंने पाया कि '$ dec' मौजूद नहीं है, इस प्रकार कमी के लिए मुझे ऋणात्मक राशि (' {$ inc: {inStock: -1}} 'इनपुट करना होगा)। कोशिश करने के लिए धन्यवाद हालांकि, यह बहुत मदद की! – Masiar

+0

क्या आप जानते हैं कि पैरामीटर के रूप में "** इनस्टॉक **" कैसे करें? –