दिलचस्प पोस्ट
ToList () – क्या यह एक नई सूची बनाएं? getApplication () बनाम getApplicationContext () आप पीओएसआईसीएस तिथि को वर्ष के आर में कैसे बदल सकते हैं? एंड्रॉइड पर त्रुटि स्ट्रिंग प्रकार की अनुमति नहीं है: मैनिफ़ेस्ट फ़ाइल में configChanges एसडीएल मुख्य मैक्रो क्यों परिभाषित करता है? C ++ में int के लिए स्ट्रिंग को कैसे पार्स करना है? स्टॉक टिकर प्रतीक लुकअप एआईआई मैं जावास्क्रिप्ट फ़ाइलों को एक फाइल में कैसे जोड़ूं? आपको एक ही पंक्ति पर एक गुमनाम समारोह की आवश्यकता क्यों है? एक्स 86 पर प्राकृतिक रूप से गठबंधन वाले परमाणु पर पूर्णांक असाइनमेंट क्यों है? पाठ-अतिप्रवाह: अंडाकार काम नहीं कर रहा है सेट इन्वर्नल कॉलबैक केवल एक बार चलाता है लाइन-एंडिंग सेटिंग कैसे बदलें विदेशी कुंजी बाधाओं का कारण हो सकता है चक्र या कई कैस्केड पथ? सत्यापन विफलता के लिए REST API सेवा द्वारा वापस जाने के लिए एक उपयुक्त HTTP स्थिति कोड क्या है?

मोंगोज ऑटो इंक्रीमेंट

इस mongodb लेख के अनुसार यह एक क्षेत्र बढ़ाना ऑटो के लिए संभव है और मैं काउंटर संग्रह के तरीके का उपयोग करना चाहता हूं।

उस उदाहरण के साथ समस्या यह है कि मेरे पास हजारों लोग नहीं हैं जो मोंगो कंसोल का उपयोग करके डेटाबेस में डेटा टाइप कर रहे हैं। इसके बजाय मैं मोंगोज का उपयोग करने की कोशिश कर रहा हूं

तो मेरा स्कीमा इस तरह दिखता है:

var entitySchema = mongoose.Schema({ testvalue:{type:String,default:function getNextSequence() { console.log('what is this:',mongoose);//this is mongoose var ret = db.counters.findAndModify({ query: { _id:'entityId' }, update: { $inc: { seq: 1 } }, new: true } ); return ret.seq; } } }); 

मैंने एक ही डेटाबेस में काउंटर संग्रह बनाया है और 'इकाई आईडी' के _id के साथ एक पृष्ठ जोड़ा है यहां से मुझे यकीन नहीं है कि उस पृष्ठ को अपडेट करने के लिए मोंगोज का उपयोग कैसे करें और बढ़ते नंबर प्राप्त करें।

काउंटरों के लिए कोई स्कीमा नहीं है और मैं इसे उस तरह से रहने के लिए चाहूंगा क्योंकि यह वास्तव में किसी एन्टिटी द्वारा उपयोग की जाने वाली संस्था नहीं है। इसे केवल स्कीमा (ओफ़) में ऑटो इंक्रीमेंट फ़ील्ड में इस्तेमाल किया जाना चाहिए

वेब के समाधान से एकत्रित समाधान "मोंगोज ऑटो इंक्रीमेंट"

यहां एक उदाहरण दिया गया है कि आप मोंगोज़ में ऑटो-इरक्रीमेंट फ़ील्ड कैसे लागू कर सकते हैं:

 var CounterSchema = Schema({ _id: {type: String, required: true}, seq: { type: Number, default: 0 } }); var counter = mongoose.model('counter', CounterSchema); var entitySchema = mongoose.Schema({ testvalue: {type: String} }); entitySchema.pre('save', function(next) { var doc = this; counter.findByIdAndUpdate({_id: 'entityId'}, {$inc: { seq: 1} }, function(error, counter) { if(error) return next(error); doc.testvalue = counter.seq; next(); }); }); 

आप mongoose-auto-increment पैकेज का उपयोग निम्नानुसार कर सकते हैं:

 var mongoose = require('mongoose'); var autoIncrement = require('mongoose-auto-increment'); /* connect to your database here */ /* define your CounterSchema here */ autoIncrement.initialize(mongoose.connection); CounterSchema.plugin(autoIncrement.plugin, 'Counter'); var Counter = mongoose.model('Counter', CounterSchema); 

आपको autoIncrement एक बार प्रारंभ करने की आवश्यकता है

सबसे ज्यादा मतदान का जवाब काम नहीं करता है। यह तय है:

 var CounterSchema = new mongoose.Schema({ _id: {type: String, required: true}, seq: { type: Number, default: 0 } }); var counter = mongoose.model('counter', CounterSchema); var entitySchema = mongoose.Schema({ sort: {type: String} }); entitySchema.pre('save', function(next) { var doc = this; counter.findByIdAndUpdateAsync({_id: 'entityId'}, {$inc: { seq: 1} }, {new: true, upsert: true}).then(function(count) { console.log("...count: "+JSON.stringify(count)); doc.sort = count.seq; next(); }) .catch(function(error) { console.error("counter error-> : "+error); throw error; }); }); 

विकल्प पैरामीटर आपको अपडेट का परिणाम देता है और यह एक नया दस्तावेज़ बनाता है यदि यह मौजूद नहीं है। आप यहां आधिकारिक डॉक्टर की जांच कर सकते हैं ।

और अगर आपको एक सॉर्ट किए गए सूचकांक की आवश्यकता है तो इस डॉक्टर की जांच करें

उत्तर अनुक्रम बढ़ता है, भले ही दस्तावेज़ में पहले से ही एक _id फ़ील्ड (सॉर्ट, जो कुछ भी हो) है। यदि मौजूदा दस्तावेज़ को अपडेट करने के लिए आप 'सहेजें' हैं तो यह मामला होगा। नहीं?

अगर मैं सही हूँ, तो आप अगले कॉल करना चाहते हैं () अगर यह। _id! == 0

इस बारे में मोंगोउज़ डॉक्स सुपर स्पष्ट नहीं हैं। अगर यह आंतरिक रूप से अद्यतन प्रकार क्वेरी कर रहा है, तो पूर्व ('सहेजें' को नहीं कहा जा सकता है

स्पष्टीकरण

ऐसा लगता है कि 'सहेजें' पूर्व पद्धति को वास्तव में अद्यतनों पर कहा जाता है।

मुझे नहीं लगता कि आप अपने अनुक्रम को बेवजह रूप से बढ़ाना चाहते हैं। यह आपको एक क्वेरी की लागत और क्रम संख्या को अपव्यय करता है।