2012-10-10 37 views
8

मैंने बनाया है और अब एक डमी संग्रह आयात करना चाहते हैं। प्रत्येक आइटम में फ़ील्ड में से एक "बनाया गया" और "अपडेट किया गया" फ़ील्ड है। मैं स्रोत/जेसन फ़ाइल में क्या डाल सकता हूं ताकि मोंगो डीबी आयात पर मूल्य के रूप में वर्तमान दिनांक और समय का उपयोग करे?MongoDb टाइमस्टैम्प

इस अभ्यस्त काम

"created" : Date() 
+0

की तरह कुछ करने की कोशिश की 'नई तिथि()' किया? – udidu

+0

मुझे "स्रोत/जेसन फ़ाइल' कहकर" नई तिथि() " – Simba

+0

का क्या मतलब है जब मैं JSON स्ट्रिंग त्रुटि को पार्स करने में विफलता प्राप्त करता हूं? – udidu

उत्तर

12

mongoimport CSV, TSV, या JSON प्रारूप में डेटा मौजूदा डेटा आयात करने के लिए है। यदि आप नए फ़ील्ड (जैसे created टाइमस्टैम्प) डालना चाहते हैं तो आपको उनके लिए एक मूल्य निर्धारित करना होगा।

उदाहरण के लिए, आप वर्तमान समय के created टाइमस्टैम्प सेट करना चाहते हैं, तो आप कमांड लाइन से एक यूनिक्स टाइमस्टैम्प (जो अवधि के बाद सेकंड हो जाएगा) मिल सकता है:

$ date +%s 
1349960286 
JSON <date> representation

कि mongoimport उम्मीद है कि युग के बाद से 64-बिट हस्ताक्षरित पूर्णांक मिलीसेकंड का प्रतिनिधित्व करता है। आप 1000 से unixtime सेकंड मूल्य गुणा और अपने JSON फ़ाइल में शामिल करने के लिए की आवश्यकता होगी:

{ "created": Date(1349960286000) } 

एक वैकल्पिक दृष्टिकोण के बाद वे डाला गया है दस्तावेजों के लिए बनाया timestamps जोड़ने के लिए किया जाएगा।

उदाहरण के लिए:

db.mycoll.update(
    {created: { $exists : false }}, // Query criteria 
    { $set : { created: new Date() }}, // Add 'created' timestamp 
    false, // upsert 
    true // update all matching documents 
) 
+0

फ़ील्ड एक ISODATE के बारे में क्या है? मैंने देखा है कि दिनांक (टाइमस्टैम्प) एक स्ट्रिंग का उत्पादन करता है, और आईएसओडीएटी (समेटिमस्टैम्प) पूरी तरह से अलग और अप्रत्याशित तारीख उत्पन्न करता है। स्ट्रिंग से ISODate प्रारूप में कैसे परिवर्तित करें? – Ketema

+4

['ISODate()' function] (https://github.com/mongodb/mongo/blob/v2.2/src/mongo/shell/utils.js#L400) 'तिथि बनाने के लिए एक सुविधाजनक सहायक है)) 'वस्तुओं। 'आईएसओडीएटी()' कन्स्ट्रक्टर आईएसओ 8601-स्टाइल दिनांक/समय स्ट्रिंग की अपेक्षा करता है, जबकि 'दिनांक()' एक यूनिटटाइम (युग के बाद से सेकंड) की अपेक्षा करता है। यदि आप 'मोंगो' खोल में 'नई तिथि() 'और' नया ISODate() 'आज़माते हैं तो आपको देखना चाहिए कि वे दोनों एक ही मान (एक' ISODATE') उत्पन्न करते हैं। दोनों प्रारूपों में समान [बीएसओएन प्रतिनिधित्व] (http://bsonspec.org/#/specification) है, जो एक यूटीसी डेटाटाइम है। – Stennie

3

रूप Stennie सही ढंग से कहा, तुम बस mongoimport या mongorestore साथ ऐसा नहीं कर सकते: वे सिर्फ बहाल करने के लिए कर रहे हैं अपने पहले से डेटा फेंक दिया। ऐसा करने का सही तरीका डेटा को पुनर्स्थापित करना है और फिर पुनर्स्थापित डेटा पर अपडेट करना है।

एक नए मोंगो 2.6 के साथ आप $currentDate ऑपरेशन का उपयोग करके आसानी से ऐसा कर सकते हैं, जिसे वर्तमान टाइमस्टैम्प में समय अपडेट करने के लिए बनाया गया था।

आपके मामले में आप की जरूरत

db.users.update( 
    {}, 
    { 
    $currentDate: { 
     created: true, 
     updated: true 
    }, 
    } 
)