पूर्णांक सम्मिलित करने का प्रयास करते समय MongoDB आवेषण फ्लोट करते हैं


209
   > db.data.update({'name': 'zero'}, {'$set': {'value': 0}}) 
   > db.data.findOne({'name': 'zero})
    {'name': 'zero', 'value': 0.0}  

मैं पूर्णांक सम्मिलित करने के लिए मोंगो कैसे प्राप्त करूं?

धन्यवाद


आप कौन से संस्करण का उपयोग करते हैं?
kamaradclimber


1
ध्यान दें कि मेरे मामले में, जब मैं {$ सेट: {val: NumberInt (0)}} कुछ "वैल" पर चाहता था, जो पहले से ही लॉन्ग के रूप में सेट है, तो इसने इसे नहीं बदला। मुझे पहले इसे कुछ अन्य मानों में बदलना पड़ा, फिर इसे 0 में बदल दिया, नंबरइंट के लिए (0) प्रभावी होने के लिए
kommradHomer

मुझे एक ही समस्या थी, यह महसूस करने के बाद कि मैंने गलती से एक इंट 32 को डबल में बदल दिया था, इसे नंबरआईंट () का उपयोग करके वापस सेट किया जब तक कि मैं पहली बार एक अलग मूल्य में नहीं बदल गया।
user1055568

जवाबों:


328
db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}})

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


1
लेकिन findOne में यह कहता है कि नंबरलॉन्ग (0) 0 के रूप में नहीं
दिवास्वप्न

11
डिफ़ॉल्ट रूप से, मोंगो शेल फ्लोटिंग-पॉइंट वैल्यू के रूप में सभी नंबरों को मानता है। इसलिए हमें स्पष्ट रूप से यह निर्दिष्ट करने की आवश्यकता है कि हम किस प्रकार की संख्या का उपयोग करना चाहते हैं जैसे कि नंबरइंट या नंबरलॉन्ग। docs.mongodb.org/manual/core/shell-types
यदु

12
मेरा एक सवाल है। NumberInt केवल मैंगो शेल में प्रदान किया गया है, आप नोड.जेएस जैसी जावास्क्रिप्ट भाषा में कैसे करते हैं?
17 :05 萧

@ श्वायोक यहां एक उत्तर है stackoverflow.com/a/21870772/3815843
GRiMe2D

यह ध्यान रखना जरूरी है कि किलों में सीमा होती है। यदि संख्या बड़ी है तो नंबरलॉन्ग का उपयोग करने पर विचार करें
टिम गिवोइस


5

यदि मान प्रकार पहले से ही डबल है, तो $ सेट कमांड के साथ मूल्य को अपडेट करें नंबरआईंट () या नंबरलॉन्ग () फ़ंक्शन का उपयोग करते समय मूल्य प्रकार को इंट में डबल नहीं बदल सकते। तो, मान प्रकार बदलने के लिए, इसे पूरे रिकॉर्ड को अपडेट करना होगा।

var re = db.data.find({"name": "zero"})
re['value']=NumberInt(0)
db.data.update({"name": "zero"}, re)

$setकम से कम मोंगो 4.2 में काम किया, इसलिए शायद यह एक बग था।
सेरेबस

-10

खैर, यह जावास्क्रिप्ट है, इसलिए आपके पास 'मूल्य' में एक संख्या है, जो पूर्णांक या फ्लोट हो सकती है। लेकिन वास्तव में जावास्क्रिप्ट में कोई अंतर नहीं है। से सीखना जावास्क्रिप्ट :

नंबर डेटा प्रकार

जावास्क्रिप्ट में संख्या डेटा प्रकार फ़्लोटिंग पॉइंट नंबर हैं, लेकिन उनके पास एक आंशिक घटक हो सकता है या नहीं हो सकता है। यदि उनके पास दशमलव बिंदु या अंश घटक नहीं है, तो उन्हें पूर्णांक के रूप में माना जाता है — आधार -10 पूरी संख्या -२ 53 से 2 53 की सीमा में ।


27
वास्तव में यह सच नहीं है। जबकि JS में कोई अंतर नहीं दिखता है, जैसे ही आप दूसरी भाषा (जैसे जावा) से मोंगो से जुड़ते हैं, आप अंतर को बहुत महसूस करेंगे।
ओम्री स्पेक्टर

2
मेरा आवेदन केवल एक कारण के लिए अलग-अलग बिंदुओं में टूट गया है, इंट बच गया है और फ्लोट के रूप में वापस आ गया है। मुझे संदेह है कि कारण कुछ मैनुअल सम्मिलन होना चाहिए जो मैंने मोंगो शेल के माध्यम से किया था जो जावास्क्रिप्ट का उपयोग करता है।
मेल्सी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.