2012-05-15 18 views
14

मुझे वास्तव में mongodb द्वारा उत्पन्न _ids के प्रारूप को पसंद है। अधिकतर क्योंकि मैं डेटा क्लाइंट की तारीख से डेटा खींच सकता हूं। मैं एक और डेटाबेस का उपयोग करने की योजना बना रहा हूं लेकिन फिर भी मेरे दस्तावेज़ के लिए उस प्रकार का _id चाहता हूं। मैं mongodb का उपयोग किए बिना इन आईडी कैसे बना सकता हूँ?क्या मोंगोडब के बिना _id स्ट्रिंग्स जैसे मोंगोडब बनाने का कोई तरीका है?

धन्यवाद!

+0

मुझे पता है कि अगर हम अन्य प्रोग्रामिंग भाषाओं में वस्तु आईडी की तरह MongoDB उत्पादन कर सकते हैं विशेष रूप से जावा और सी – Saifee

उत्तर

18

वस्तु आईडी आम तौर पर ग्राहक द्वारा उत्पन्न कर रहे उपयोग कर सकते हैं, इसलिए किसी भी MongoDB ड्राइवर कोड करने के लिए होगा उन्हें उत्पन्न करें।

https://github.com/mongodb/node-mongodb-native/blob/V0.9.7.4-dev/lib/mongodb/bson/objectid.js

और एक और, सरल समाधान:

https://github.com/justaprogrammer/ObjectId.js

20

एक बहुत ही आसान

आप जावास्क्रिप्ट के लिए देख रहे हैं, तो यहाँ MongoDB Node.js चालक से कुछ कोड है जावास्क्रिप्ट में छद्म ऑब्जेक्ट आईडी जनरेटर:

const ObjectId = (m = Math, d = Date, h = 16, s = s => m.floor(s).toString(h)) => 
    s(d.now()/1000) + ' '.repeat(h).replace(/./g,() => s(m.random() * h)) 
+1

और 'mongoose.Types.ObjectId.isValid' कहना चाहते हैं' TRUE' – webjay

7

मेरे पास एक ब्राउज़र क्लाइंट है जो ObjectId एस उत्पन्न करता है। मैं यह सुनिश्चित करना चाहता था कि मैं क्लाइंट में उसी ObjectId एल्गोरिदम को सर्वर में उपयोग करता हूं। MongoDB में js-bson है जिसका उपयोग इसे पूरा करने के लिए किया जा सकता है।

यदि आप नोड के साथ जावास्क्रिप्ट का उपयोग कर रहे हैं।

npm install --save bson

का उपयोग करते हुए बयान

var ObjectID = require('bson').ObjectID; 

var id = new ObjectID(); 
console.log(id.toString()); 

का उपयोग ES6 इंपोर्ट स्टेटमेंट

import { ObjectID } from 'bson'; 

const id = new ObjectID(); 
console.log(id.toString()); 

पुस्तकालय भी आप अच्छे पुराने स्क्रिप्ट टैग का उपयोग करके आयात लेकिन मैं प्रयास नहीं किया है की सुविधा देता है की आवश्यकता होती है इस।

+0

धन्यवाद, यह मैं क्या देख रहा था है। – Sgnl

1

रूबेन-लोक का जवाब बहुत अच्छा है, लेकिन जानबूझकर अपारदर्शी है? अलग-अलग चुनना बहुत आसान है:

const ObjectId = (rnd = r16 => Math.floor(r16).toString(16)) => 
    rnd(Date.now()/1000) + ' '.repeat(16).replace(/./g,() => rnd(Math.random()*16)); 

(वास्तव में थोड़ा कम वर्णों में)। हालांकि कुडोस!

संबंधित मुद्दे