के बजाय आउटपुट 'आईडी' मैं mongoose (नोड) का उपयोग कर रहा हूं, _id के बजाय आईडी आउटपुट करने का सबसे अच्छा तरीका क्या है?मोंगोडीबी: '_id'
उत्तर
मैं अपने मॉडल पर एक toClient() विधि बनाता हूं जहां मैं ऐसा करता हूं।
Schema.method('toClient', function() {
var obj = this.toObject();
//Rename fields
obj.id = obj._id;
delete obj._id;
return obj;
});
मैं वास्तव में मोंगोज़ के लिए नया हूं, ऐसा लगता है कि मैं क्या चाहता हूं। आप इसे क्लाइंट को कैसे कॉल करते हैं? आम तौर पर मैं करता हूं, ढूंढता हूं(), और दस्तावेज़ दस्तावेज़ वापस प्राप्त करता हूं, फिर बस res.send (दस्तावेज़) करें। तो इस मामले में, क्या मैं प्रत्येक दस्तावेज़ पर res.write (दस्तावेज़ [1] .toClient()) को कॉल करता हूं? धन्यवाद – Johnny
यह मेरे लिए अब काम नहीं कर रहा है - क्या मोंगोस में ऐसा करने का तरीका बदल गया है? – outside2344
आभासी शायद आप चाहते हैं। – Leonidas
अन्य ड्राइवर कि http://alexeypetrushin.github.com/mongo-lite सत्य पर convertId
विकल्प सेट करता है नहीं है: यह भी नाम बदलने के लिए/अन्य विशेषताओं आप ग्राहक को भेजने के लिए नहीं करना चाहते हैं को दूर एक अच्छी जगह है। अधिक जानकारी के लिए "डिफ़ॉल्ट & सेटिंग" अनुभाग देखें।
यह देखते हुए कि आप मोंगोस का उपयोग कर रहे हैं, आप 'वर्चुअल' का उपयोग कर सकते हैं, जो अनिवार्य रूप से नकली फ़ील्ड हैं जो मोंगोस बनाता है। वे डीबी में संग्रहीत नहीं कर रहे हैं, वे सिर्फ रन टाइम पर पॉपुलेटेड हो:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
किसी भी समय toJSON आप इस स्कीमा से बनाने के मॉडल पर कहा जाता है, यह एक 'आईडी' फ़ील्ड कि _ id से मेल खाता है शामिल होंगे क्षेत्र मोंगो उत्पन्न करता है। इसी प्रकार आप उसी तरह से ऑब्जेक्ट के लिए व्यवहार सेट कर सकते हैं।
देखें:
- http://mongoosejs.com/docs/api.html
- http://mongoosejs.com/docs/guide.html#toJSON
- http://mongoosejs.com/docs/guide.html#toObject
आप एक BaseSchema में इस सार अपने सभी मॉडलों तो विस्तार/एक ही स्थान पर तर्क रखने के लिए आह्वान कर सकते हैं। मैंने एम्बर/नोड/मोंगोस ऐप बनाने के दौरान उपरोक्त लिखा था, क्योंकि एम्बर वास्तव में काम करने के लिए 'आईडी' फ़ील्ड रखना पसंद करता था।
+1 मेरे लिए अच्छा काम किया –
बहुत अच्छा समाधान (+1)। 'Console.log (obj)' का उपयोग करते समय मैं 'स्कीमा.सेट (' toObject ', {virtuals: true}) को आउटपुट में वर्चुअल देखने में सक्षम होने के लिए भी जोड़ूंगा। – Tom
यह _id फ़ील्ड रखता है। मैं बदले में ट्रांसफॉर्म समाधान पसंद करता हूं, shakinfree द्वारा प्रदान किया गया एक मेरे लिए काम करता है। –
//Transform
Schema.options.toJSON.transform = function (doc, ret, options) {
// remove the _id of every document before returning the result
ret.id = ret._id;
delete ret._id;
delete ret.__v;
}
वहाँ रिवर्स करने के लिए एक "Schema.options.toObject.transform" संपत्ति है या तुम सिर्फ एक आभासी आईडी के रूप में सेट कर सकते थे।
इसके लिए धन्यवाद! –
यहां @ user3087827 द्वारा दिए गए उत्तर का एक वैकल्पिक संस्करण है। आप पाते हैं कि schema.options.toJSON
अपरिभाषित है तो आप उपयोग कर सकते हैं:
schema.set('toJSON', {
transform: function (doc, ret, options) {
ret.id = ret._id;
delete ret._id;
delete ret.__v;
}
});
नेवला v4.0 इस कार्यशीलता के हिस्सा बॉक्स से बाहर समर्थित है के रूप में। @Pascal Zajac द्वारा समझाया गया है कि मैन्युअल रूप से वर्चुअल id
फ़ील्ड को मैन्युअल रूप से जोड़ने की आवश्यकता नहीं है।
नेवला अपने स्कीमा में से प्रत्येक प्रदान करती है जो एक स्ट्रिंग के लिए दस्तावेजों _ id क्षेत्र डाली लौटाता है, या मामले ObjectIds की , अपने hexString में डिफ़ॉल्ट द्वारा एक आईडी आभासी गेटर। यदि आप नहीं चाहते हैं कि आईडी स्टेटर आपकी स्कीमा में जोड़ा गया है, तो आप स्कीमा निर्माण समय पर इस विकल्प को पारित कर सकते हैं।Source
हालांकि, निर्यातJSON को इस क्षेत्र के लिए, यह अभी भी आवश्यक है आभासी क्षेत्रों में क्रमबद्धता सक्षम करने के लिए:
Schema.set('toJSON', {
virtuals: true
});
यह v4.0 से बहुत पहले सच था, लेकिन ओपी चाहता है कि * बस * आईडी (और _id नहीं) के लिए वापस लौटाया जाए। आभासी आईडी दोनों को शामिल करने के लिए बस मोंगोस को बताएं। – neverfox
मैं इस उद्देश्य के लिए plugin उपयोग करने के लिए एक आसान बनाया है कि मैं अपनी सभी परियोजनाओं और वैश्विक स्तर पर सभी स्कीमा के लिए आवेदन करता हूं। यह _id
से id
में परिवर्तित करता है और __v
पैरामीटर भी स्ट्रिप्स करता है।
तो यह धर्मान्तरित: एक वैश्विक प्लगइन के रूप में
{
"id": "400e8324a71d4410b9dc3980b5f8cdea",
"name": "Item A"
}
उपयोग::
{
"_id": "400e8324a71d4410b9dc3980b5f8cdea",
"__v": 2,
"name": "Item A"
}
एक सरल और क्लीनर के लिए
const mongoose = require('mongoose');
mongoose.plugin(require('meanie-mongoose-to-json'));
या एक विशिष्ट स्कीमा के लिए:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const MySchema = new Schema({});
MySchema.plugin(require('meanie-mongoose-to-json'));
उम्मीद है कि यह किसी की मदद करेगा।
schema.set('toJSON', {
virtuals: true,
versionKey:false,
transform: function (doc, ret) { delete ret._id }
});
मुझे लगता है कि यह बहुत अच्छा है, तो वे अपने आप _ id को दबाने जब virtuals सच है होगा:
मैं इस का इस्तेमाल किया।
आइटम लौटने के लिए आप खोज करते समय कुल कार्य का भी उपयोग कर सकते हैं। $ प्रोजेक्ट आपको फ़ील्ड बनाने की अनुमति देगा, जो आप कर सकते हैं और इसे _id पर असाइन कर सकते हैं।
<model>.aggregate([{$project: {_id: 0, id: '$_id'}], (err, res) => {
//
})
- 1. एक मोंगोडीबी दस्तावेज़ के _id को कैसे अपडेट करें?
- 2. मोंगोडीबी
- 3. मोंगोडीबी
- 4. मोंगोडीबी
- 5. मोंगोडीबी
- 6. एक नए _id
- 7. उल्का: _id
- 8. mongodb $ _id
- 9. एक मोंगोडीबी खोल क्वेरी
- 10. कस्टम _id मान
- 11. स्टोर _Id मोंगोडीबी में ऑब्जेक्ट या स्ट्रिंग के रूप में स्टोर करें?
- 12. मोंगोडीबी: क्या स्वचालित _id फ़ील्ड का उपयोग करना टालना संभव है?
- 13. मोंगोडीबी में, दस्तावेज _id को संग्रह या पूरे डीबी में अद्वितीय होने की आवश्यकता है?
- 14. मोंगोडीबी: स्थिर मूल्य
- 15. मोंगोडीबी सरणी
- 16. मोंगोडीबी जावा समूह/गिनती समारोह
- 17. मोंगोडीबी - डीबीआरईएफ आवश्यक है?
- 18. क्या मोंडोडीबी में पूर्णांक में _id प्रकार बदलना बुरा है?
- 19. मोंगोडीबी
- 20. मोंगोडीबी
- 21. मोंगोडीबी
- 22. मोंगोडीबी
- 23. मोंगोडीबी
- 24. मोंगोडीबी
- 25. मोंगोडीबी
- 26. मोंगोडीबी
- 27. मोंगोडीबी
- 28. मोंगोडीबी
- 29. मोंगोडीबी
- 30. मोंगोडीबी
नए पाठकों के लिए: नीचे आप एकाधिक * अलग * दृष्टिकोण देखेंगे। चुनिंदा या अधिक वोटों के लिए अंधेरे से जाने के बजाए, उन्हें चुनने से पहले सभी को पढ़ना बुद्धिमानी है। चीयर्स! – sshow