মোংডোবে তারিখ / সময় সঞ্চয় করার সর্বোত্তম উপায়


177

আমি স্ট্রিংস, পূর্ণসংখ্যার টাইমস্ট্যাম্প এবং মঙ্গো ডেটটাইম অবজেক্টগুলি ব্যবহার করে দেখেছি।

উত্তর:


200

সর্বোত্তম উপায় হ'ল দেশীয় জাভাস্ক্রিপ্টের তারিখ অবজেক্টগুলি সঞ্চয় করা , যা BSON নেটিভ তারিখের অবজেক্টগুলিতে মানচিত্র করে

> db.test.insert({date: ISODate()})
> db.test.insert({date: new Date()})
> db.test.find()
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:42.389Z") }
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:57.240Z") }

নেটিভ টাইপ বাক্সের বাইরে কার্যকর পদ্ধতিগুলির পুরো পরিসর সমর্থন করে , যা আপনি আপনার মানচিত্র-হ্রাস কাজগুলিতে ব্যবহার করতে পারেন, উদাহরণস্বরূপ।

আপনার যদি প্রয়োজন হয় তবে আপনি যথাক্রমে পদ্ধতি এবং Dateনির্মাতা ব্যবহার করে যথাক্রমে ইউনিক্স টাইমস্ট্যাম্পগুলি 1) এবং এ থেকে অবজেক্টগুলিকে রূপান্তর করতে পারেন ।getTime()Date(milliseconds)

1) কড়া কথায় বলতে গেলে ইউনিক্স টাইমস্ট্যাম্পটি সেকেন্ডে পরিমাপ করা হয় । জাভাস্ক্রিপ্টের তারিখ অবজেক্টটি ইউনিক্সের যুগ থেকে মিলিসেকেন্ডে পরিমাপ করে ।


9
কীভাবে এটি ডিবিতে সংরক্ষণ করা হবে? মঙ্গো ডেটটাইম অবজেক্ট হিসাবে?
থিলো

2
@ থিলো: মঙ্গোডিবি-র যতদূর আমি জানি কোনও বিশেষ 'ডেটটাইম' অবজেক্ট নেই। এটি জাভাস্ক্রিপ্ট তারিখের ধরণটি ব্যবহার করে যা BSON আকারে সঞ্চিত।
নিলস ভ্যান ডের রেস্ট রেস্ট

1
@ থিলো: সঠিক, এটি মূলত একটি জাভাস্ক্রিপ্টের তারিখ অবজেক্টের BSON প্রতিনিধিত্ব। এটি একটি -৪-বিট পূর্ণসংখ্যা যা ইউনিক্সের সূচনালগ্ন থেকে মিলিসেকেন্ডগুলি সঞ্চয় করে এবং জাভাস্ক্রিপ্টের নির্দিষ্টকরণ থেকে পদ্ধতিগুলির (বেশিরভাগ?) সমর্থন করে
নীলস ভ্যান ডের রেস্ট রেস্ট

1
@ আবুজাররাজী 389এবং 240টাইমস্ট্যাম্পের মিলি সেকেন্ডগুলি । Zমধ্যে স্ট্রিং বিন্যাস MongoDB বলে যে টাইমস্ট্যাম্প আপনার দেওয়া ইউটিসি হয়। এরপরে যদি আপনি এটি আবার পড়ে থাকেন তবে আপনার অ্যাপ্লিকেশন সম্ভবত এটিকে আপনার স্থানীয় সময় অঞ্চলে রূপান্তর করবে , দেখে মনে হচ্ছে সময় বদলেছে। তবে সময়টি এখনও একইরকম, এটি কেবল ভিন্ন টাইমজোন দৃষ্টিকোণ থেকে ব্যাখ্যা করা। উদাহরণস্বরূপ 12:50:42Zএবং 13:50:42+01:00সময় একই মুহূর্ত উপস্থাপন।
নিলস ভ্যান ডের রেস্ট

5
@ আবুজাররাজী সাধারণ প্রাথমিকভাবে যতক্ষণ প্রাথমিক ইনপুট সঠিক থাকে ততক্ষণ আপনি কীভাবে এটি সংরক্ষণ করা হয় তা নিয়ে উদ্বিগ্ন হতে চান না । যদি এটি 21:56:03+01:00এখনই সিইটিতে থাকে এবং আপনি সন্নিবেশ করান new Date(), তবে মঙ্গোডিবি এটি হিসাবে উপস্থাপন করতে পারে 20:56:03Z। তবে আপনি যখন এটি আবার পড়েন এবং স্থানীয় সময় অঞ্চল সেটিংস (সিইটি) ব্যবহার করে আপনার অ্যাপ্লিকেশনটিতে এটি প্রদর্শন করেন, এটি 21:56:03আবার পড়বে ।
নীলস ভ্যান ডের রেস্ট

53

সন্নিবেশের সময়টিকে উপস্থাপন করে একটি ডেটস্ট্যাম্প ইতিমধ্যে _id অবজেক্টে রয়েছে

সুতরাং যদি সন্নিবেশের সময়টি আপনার প্রয়োজন মতো হয় তবে এটি ইতিমধ্যে রয়েছে:

Mongodb শেল লগইন করুন

ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test

আইটেম সন্নিবেশ করে আপনার ডাটাবেস তৈরি করুন

> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 

সেই ডাটাবেসটিকে এখনই আমরা তৈরি করি Le

> use penguins
switched to db penguins

সারিগুলি ফিরে পান:

> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }

প্রতিটি সারিটি yyyy-MM-dd HH: মিমি: এসএস ফর্ম্যাটে পান:

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53

যদি সেই শেষ ওয়ান-লাইনার আপনাকে বিভ্রান্ত করে তবে এখানে কীভাবে কাজ করে তা সম্পর্কে আমার কাছে ওয়াকথ্রু রয়েছে: https://stackoverflow.com/a/27613766/445131


18
তবে ডকুমেন্টটি কখন ডিবিতে সংরক্ষণ করা হয়েছিল এটির টাইমস্ট্যাম্প, কখনও কখনও আপনি তারিখ এবং সময় সন্নিবেশের তারিখের সাথে সম্পর্কিত না করে সঞ্চয় করতে চান।
যুওয়াল এ।

1
যদি আপনার ডাটাবেসটি সত্যিই দ্রুত হয় এবং দুটি ডকুমেন্ট একই মিলিসেকেন্ডে সংরক্ষণ করা হয় .. সেই নথিতে কি একই রকম আছে _id?
রেডসান্দ্রো

10
@ রেডসান্ড্রো নো, তবে সম্ভবত তাদের একই ফলাফল হতে পারে _id.getTimestamp()
kmiyashiro

@ কিমিয়াশিরো, আপনি কি টাইমস্ট্যাম্পের ভিত্তিতে বাছাই করবেন তা জানবেন?
নেতৃত্বলজিক

1
কিছু নয়, বাছাই করুন ({তৈরি করা হয়েছে: -1); পদ্ধতির থেকে ব্যবহার করা stackoverflow.com/questions/28599237/...
ledlogic
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.