टेलीफोन नंबरों को पूर्णांक के रूप में संग्रहीत न करें। उन्हें तार के रूप में स्टोर करें। जब आपके पास कोई ऐसा मान होता है जिसमें केवल अंक होते हैं और जिस पर अंकगणित व्यर्थ होते हैं, जैसे ज़िप-कोड, बैंक खाता संख्या या टेलीफोन नंबर, तो इसे एक संख्या के रूप में संग्रहीत करना ज्यादा समझ में नहीं आता है।
- जैसा कि आपने पहले ही देखा है, जब आप अंक-अनुक्रम की खोज करना चाहते हैं तो संख्याओं को खोजना लगभग असंभव है, क्योंकि कंप्यूटर सिस्टम दशमलव में नहीं, बल्कि बाइनरी में पूर्णांकों को संग्रहीत करते हैं।
- आपके पास अग्रणी शून्य नहीं हो सकते हैं
- जब संख्या बहुत लंबी होती है, तो आप या तो एक पूर्णांक अतिप्रवाह का सामना करेंगे या आप इसे एक फ़्लोटिंग-पॉइंट नंबर में बदल देंगे (आपके MongoDB ड्राइवर के विवेक पर)। दोनों का परिणाम बहुत ही अजीब व्यवहार होगा।
यह सब केवल MongoDB ही नहीं, लगभग किसी भी डेटाबेस पर लागू होता है।
लेकिन क्या आपको उन्हें संख्याओं के रूप में रखने के लिए पूरी तरह से दृढ़ संकल्प होना चाहिए, यहां दो चीजें हैं जो आप कर सकते हैं।
- जब अज्ञात अंकों की संख्या तय हो जाती है, तो आप
$gt
. का उपयोग कर सकते हैं और$lt
ऑपरेटरों को एक सीमा की खोज करने के लिए।contactphone:{$gt:5556000, $lt:5556999}
5556xxx
. पैटर्न के साथ सभी नंबरों को ढूंढेगा । - आप एक
$where
का उपयोग कर सकते हैं -क्वेरी जो प्रत्येक संख्या को एक स्ट्रिंग में आंतरिक रूप से परिवर्तित करने के लिए जावास्क्रिप्ट फ़ंक्शन का उपयोग करती है और फिर उस स्ट्रिंग पर आपकी नियमित अभिव्यक्ति लागू करती है।$where: "String(this.contactphone).match(/^4832/) != null"
. मुझे आशा है कि आपके डेटाबेस में कई दस्तावेज़ नहीं होंगे, क्योंकि जब आप ऐसा करते हैं, तो इस क्वेरी में कुछ समय लग सकता है।