2013-04-24 5 views
13

के रूप में समय स्टाम्प भंडारण मैं Mongoid के लिए नया हूँ। मेरी मॉडल फ़ाइल में, मैंने डेटा प्रकार बिगडिसीमल के साथ एक फ़ील्ड बनाया है। मैं इसमें टाइम स्टैंप स्टोर करना चाहता हूं।नंबर मोंगोइड

class Test 
    include Mongoid::Document 
    field :time_stamp, type: BigDecimal 
end 

और नीचे कोड है कि मैं एक दस्तावेज़ बनाने के लिए उपयोग कर रहा हूँ है::

aTime = "Wed Apr 24 09:48:38 +0000 2013" 
timest = aTime.to_time.to_i 
Test.create({time_stamp: timest}) 

मुझे लगता है कि TIME_STAMP में स्ट्रिंग के रूप में संग्रहीत किया जाता है नीचे मॉडल है कि मैं का उपयोग कर रहा है डेटाबेस। क्या कोई मुझे टाइमस्टैम्प को डीबी में नंबर के रूप में स्टोर करने के लिए निर्देशित कर सकता है ताकि मैं उस पर कुछ संचालन कर सकूं। अग्रिम में धन्यवाद।

+2

टाइमस्टैम्प स्टोर करने के लिए, आपको 'Mongoid :: Timestamps' शामिल करने की आवश्यकता है .. यह आपके दस्तावेज़ में बनाए गए: बनाए_at और: अपडेट_ट फ़ील्ड को बनाएगा। सुनिश्चित नहीं है कि आपका फ़ील्ड 'time_stamp' एक समय स्ट्रिंग के साथ जादुई रूप से पॉप्युलेट किया गया है। – brayne

+0

यह मोंगोइड के मोंगोडीबी चालक, मोपेड में एक बग हो सकता है। क्या आप उस डेटा को पोस्ट कर सकते हैं जिसे आप मोंगो शैल में पूछताछ करके देख सकते हैं? यदि आप वास्तव में टाइमस्टैम्प को स्टोर करना चाहते हैं, तो आप फ़ील्ड प्रकार को 'BigDecimal' के बजाय' टाइम' पर सेट कर सकते हैं। – davogones

+0

@ सेंथिल, बस मूल्य को पुन: पेश करने और चालू करने की कोशिश की गई (time_stamp) को एक संख्या के रूप में संग्रहीत किया गया था। mongoid (3.0.23) – ted

उत्तर

2
this answer के अनुसार

, MongoDB द्वारा समर्थित सांख्यिक प्रकार हैं:

MongoDB stores data in a binary format called BSON which supports these numeric data types: 

int32 - 4 bytes (32-bit signed integer) 
int64 - 8 bytes (64-bit signed integer) 
double - 8 bytes (64-bit IEEE 754 floating point) 

Mongoid documentation में इस बयान से मजबूत बनाया:

Types that are not supported as dynamic attributes since they cannot be cast are: 

BigDecimal 
Date 
DateTime 
Range 

मैं चीजों को आप के साथ करना चाहते हैं के बारे में पता नहीं है फ़ील्ड, लेकिन यदि आप वास्तव में इसे एक संख्या के रूप में संग्रहीत करना चाहते हैं, तो आपको मोंगोडीबी (बीएसओएन), शायद Float या Integer द्वारा समर्थित एक अलग संख्यात्मक प्रकार का उपयोग करना होगा।

+0

यह प्रासंगिक नहीं है क्योंकि 'फ़ील्ड: time_stamp, टाइप: BigDecimal' एक समर्थित फ़ील्ड प्रकार, BigDecimal निर्दिष्ट करता है। इसे मोंगोडीबी पर संग्रहीत करने से पहले इसे एक पूर्णांक में परिवर्तित करना चाहिए। – davogones

+1

मुझे लगता है कि ** ** ** ** ** ** ** के लिए ** int32 ** से अधिक समझ में आता है, फिर भी ** असंबद्ध दशमलव ** के लिए पर्याप्त नहीं है (इसलिए इसे किसी और चीज़ के रूप में संग्रहीत किया जाना चाहिए, जैसे कि ** स्ट्रिंग **)। यदि आपके क्षेत्र को मोंगोडीबी ** int32 ** या मोंगोडीबी ** int64 ** के रूप में प्रदर्शित किया जा सकता है, तो इसे एक मोंगोइड ** इंटीजर ** बनाएं, मोंगोइड ** बिगडिमल ** नहीं। – michelpm

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