ObjectId फ़ंक्शन को Node.js Mongoose.js स्ट्रिंग


174

वहाँ एक वस्तु में एक स्ट्रिंग बारी करने के लिए एक वस्तु है नोड नोड में mongoose का उपयोग कर? स्कीमा निर्दिष्ट करता है कि कुछ एक ऑब्जेक्टआईड है, लेकिन जब इसे एक स्ट्रिंग से बचाया जाता है, तो मोंगो मुझे बताता है कि यह अभी भी सिर्फ एक स्ट्रिंग है। उदाहरण के लिए, ऑब्जेक्ट का _id, के रूप में प्रदर्शित किया जाता है objectId("blah")

जवाबों:


419

आप इसे ऐसा कर सकते हैं:

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');

हाँ, इस मामले में थोड़ा साफ है। मई केवल mongo.BSONPure का उपयोग करने की आवश्यकता हो सकती है अगर fromTime () कर रहे हों
talentedmrjones

3
क्या यह एक त्रुटि है अगर यह एक अमान्य स्ट्रिंग है? Mongo id फ़ील्ड के लिए REST API में इनपुट सत्यापन करने के सर्वोत्तम तरीके की तलाश है।
ज़ाम्बोनिली

1
वास्तव में सवाल का जवाब नहीं देता क्योंकि इस पद्धति का उपयोग करके स्ट्रिंग को परिवर्तित किया जाएगा और मूल के समान नहीं होगा।
ed209

mongoose.Types.ObjectId (आईडी) लेकिन मेरी आईडी अपरिभाषित है तो यह क्या लौटेगी? नई आईडी या त्रुटि
भट्ट

@KevinDente मैं टाइपस्क्रिप्ट के साथ Nodejs का उपयोग कर रहा हूं, मैंने आपके समाधान की कोशिश की है, लेकिन अभी भी एक स्ट्रिंग हो रही है और मेरी क्वेरी वापस नहीं आती है जो इसे वापस करना चाहिए। टाइपस्क्रिप्ट पर यह कैसे करना है पर कोई विचार?
सूफियान फादिल

9

आप इसे इस तरह से कर सकते हैं:

var mongoose = require('mongoose');
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001");

संपादित करें: नए मानक में फ्रिस्ट्रिंग के बजाय सेहेक्सस्ट्रिंग है


1
ठीक है, और भी "नया" मानक लगता है mongoose.mongo.BSONPure.ObjectID.createFromHexString () (
मानगो 3.9.7 के

1
जो लोग ऐसा करने का प्रयास कर रहे हैं, उनके लिए चयनित उत्तर की तुलना में यह बेहतर उत्तर है क्योंकि यह आईडी को परिवर्तित नहीं करेगा यदि आप पहले से ही एक मोंगो आईडी का उपयोग कर रहे हैं।
ed209

1
यह अब काम नहीं करता है, इसके बजाय स्वीकृत उत्तर का उपयोग करें
पेपर 1111

BSONPure mongoose.mongoमेरे लिए एक हिस्सा नहीं है । क्या कोई पुष्टि कर सकता है?
आर्टुर टैगिसो

5

टिप्पणियों से देखते हुए, आप देख रहे हैं:

mongoose.mongo.BSONPure.ObjectID.isValid

या

mongoose.Types.ObjectId.isValid

5
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");

3
क्या आप mongoose.Types.ObjectIdऔर के बीच अंतर पर टिप्पणी कर सकते हैं mongoose.mongo.ObjectId? मानस के गुणधर्म अलग-अलग हैं, लेकिन वे एक ही विधि को संदर्भित कर सकते हैं। कृपया Typesबनाम पर अंतर्निहित तरीकों पर टिप्पणी करें mongo
भाप से चलने वाली

5

मैं इस विधि को हल नहीं कर सका (वास्तव में मैंने लंबे समय तक खोज नहीं की थी)

mongoose.mongo.BSONPure.ObjectID.fromHexString

यदि आपका स्कीमा संपत्ति को ObjectId प्रकार का होने की उम्मीद करता है, तो रूपांतरण निहित है, कम से कम 4.7.8 में ऐसा लगता है।

आप इस तरह से कुछ का उपयोग कर सकते हैं, जो थोड़ा अधिक फ्लेक्स देता है:

function toObjectId(ids) {

    if (ids.constructor === Array) {
        return ids.map(mongoose.Types.ObjectId);
    }

    return mongoose.Types.ObjectId(ids);
}

3

आप इसका भी उपयोग कर सकते हैं

const { ObjectId } = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");

यह सबसे आसान तरीका है


0

बस नीचे दिए गए कोड स्निपेट को देखें यदि आप एक्सप्रेस और मानगो के माध्यम से रीस्ट एपीआई को लागू कर रहे हैं। (ADD के लिए उदाहरण)

....
exports.AddSomething = (req,res,next) =>{
  const newSomething = new SomeEntity({
 _id:new mongoose.Types.ObjectId(), //its very own ID
  somethingName:req.body.somethingName,
  theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// if you want to pass an object ID
})
}
...

आशा करता हूँ की ये काम करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.