আমি জানি যে অবজেক্টআইডসে সেটির তৈরি তারিখ রয়েছে। অবজেক্টআইডির এই দিকটি জিজ্ঞাসা করার কোনও উপায় আছে কি?
আমি জানি যে অবজেক্টআইডসে সেটির তৈরি তারিখ রয়েছে। অবজেক্টআইডির এই দিকটি জিজ্ঞাসা করার কোনও উপায় আছে কি?
উত্তর:
অবজেক্টআইডে টাইমস্ট্যাম্পগুলি পপিংয়ে অবজেক্টআইডে এমবেড করা তারিখের উপর ভিত্তি করে ক্যোয়ারীগুলি দুর্দান্তভাবে বর্ণনা করা হয়েছে।
সংক্ষেপে জাভাস্ক্রিপ্ট কোড:
/* This function returns an ObjectId embedded with a given datetime */
/* Accepts both Date object and string input */
function objectIdWithTimestamp(timestamp) {
/* Convert string date to Date object (otherwise assume timestamp is a date) */
if (typeof(timestamp) == 'string') {
timestamp = new Date(timestamp);
}
/* Convert date object to hex seconds since Unix epoch */
var hexSeconds = Math.floor(timestamp/1000).toString(16);
/* Create an ObjectId with that hex timestamp */
var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");
return constructedObjectId
}
/* Find all documents created after midnight on May 25th, 1980 */
db.mycollection.find({ _id: { $gt: objectIdWithTimestamp('1980/05/25') } });
~/.mongorc.jsফাইলটি এটি উপলব্ধ রাখতে সংরক্ষণ করতে পারেন mongo।
ObjectId(hexSeconds + "0000000000000000");করুনdb.ObjectID.createFromHexString(hexSeconds + "0000000000000000");
ObjectId(): require('mongoose').Types.ObjectId()- require('mongoose')আপনার প্রাথমিক / কনফিগার করা মঙ্গুজ উদাহরণটি কোথায় ।
নোড.জেজে মংডোডব চালকরা প্রদত্ত ইনবিল্ট ফাংশনটি ব্যবহার করে আপনাকে যে কোনও টাইমস্ট্যাম্পের মাধ্যমে জিজ্ঞাসা করতে দেয়:
var timestamp = Date.now();
var objectId = ObjectID.createFromTime(timestamp / 1000);
বিকল্পভাবে, বর্তমান সময়ের আগে রেকর্ড অনুসন্ধান করার জন্য, আপনি সহজভাবে এটি করতে পারেন:
var objectId = new ObjectID(); // or ObjectId in the mongo shell
সূত্র: http://mongodb.github.io/node-mongodb-native/api-bson- জেনারেটেড / বজেক্টিডিটিএইচটিএমএল
ইন pymongo, এটি এইভাবে করা যেতে পারে:
import datetime
from bson.objectid import ObjectId
mins = 15
gen_time = datetime.datetime.today() - datetime.timedelta(mins=mins)
dummy_id = ObjectId.from_datetime(gen_time)
result = list(db.coll.find({"_id": {"$gte": dummy_id}}))
pymongoনির্ভরতা ব্যবহার না করে : epoch_time_hex = format(int(time.time()), 'x') (আপনার প্রশ্নের জন্য শূন্যগুলি যুক্ত করতে ভুলবেন না) সময় প্যাকেজটি ব্যবহৃত হয়েছিল ( import time)।
যেহেতু কোনও অবজেক্টআইডের প্রথম 4 বাইট আপনার কালানুক্রমিকভাবে প্রশ্ন সংগ্রহের জন্য টাইমস্ট্যাম্পের প্রতিনিধিত্ব করে , কেবল আইডির মাধ্যমে আদেশ করুন:
# oldest first; use pymongo.DESCENDING for most recent first
items = db.your_collection.find().sort("_id", pymongo.ASCENDING)
ডকুমেন্টগুলি পাওয়ার পরে আপনি অবজেক্টআইডের প্রজন্মের সময়টি পেতে পারেন:
id = some_object_id
generation_time = id.generation_time
কমান্ডটি কীভাবে সন্ধান করবেন (এই তারিখ [2015-1-12] এই তারিখের [2015-1-15]):
db.collection.find ({_ id: {$ gt: ObjectId (Math.floor ((নতুন তারিখ ('2015/1/12')) / 1000)। স্ট্রিং (16) + "0000000000000000"), t lt: অবজেক্টআইড (ম্যাথ.ফ্লুর ((নতুন তারিখ ('2015/1/15')) / 1000)। স্ট্রিং (16) + "0000000000000000") pretty})। সুন্দর ()
কমান্ডটি গণনা করুন (এই তারিখ [2015-1-12] এই তারিখের [2015-1-15]):
db.collection.count ({_ id: $ t gt: ObjectId (Math.floor ((নতুন তারিখ ('2015/1/12 ')) / 1000)। স্ট্রিং (16) + "0000000000000000"), t lt: অবজেক্টআইড (ম্যাথ.ফ্লুর ((নতুন তারিখ ('2015/1/15')) / 1000)। স্ট্রিং (16) + "0000000000000000")}})
কমান্ডটি সরান (এই তারিখ [2015-1-12] এই তারিখে [2015-1-15]):
db.collection.remove ({_ id: {$ gt: ObjectId (Math.floor (নতুন তারিখ ('2015/1/12 ')) / 1000)। স্ট্রিং (16) + "0000000000000000"), t lt: অবজেক্টআইডি (ম্যাথ.ফ্লুর ((নতুন তারিখ ('2015/1/15')) / 1000)। স্ট্রিং (16) + "0000000000000000")}})
আপনি $convert4.0 সংস্করণে অবজেক্টআইড থেকে তারিখটি বের করতে ফাংশনটি ব্যবহার করতে পারেন ।
কিছুটা এইরকম
$convert: { input: "$_id", to: "date" }
তারিখের শুরু এবং শেষ সময়ের মধ্যে তুলনা করার তারিখে আপনি জিজ্ঞাসা করতে পারেন।
db.collectionname.find({
"$expr":{
"$and":[
{"$gte":[{"$convert":{"input":"$_id","to":"date"}}, ISODate("2018-07-03T00:00:00.000Z")]},
{"$lte":[{"$convert":{"input":"$_id","to":"date"}}, ISODate("2018-07-03T11:59:59.999Z")]}
]
}
})
অথবা
আপনি $toDateএটি অর্জন করতে শর্টহ্যান্ড ব্যবহার করতে পারেন ।
db.collectionname.find({
"$expr":{
"$and":[
{"$gte":[{"$toDate":"$_id"}, ISODate("2018-07-03T00:00:00.000Z")]},
{"$lte":[{"$toDate":"$_id"},ISODate("2018-07-03T11:59:59.999Z")]}
]
}
})
মঙ্গো সংগ্রহে সর্বশেষ 60 দিনের পুরানো নথিপত্র পেতে আমি শেলের কোয়েরির নীচে ব্যবহার করেছি।
db.collection.find({_id: {$lt:new ObjectId( Math.floor(new Date(new Date()-1000*60*60*24*60).getTime()/1000).toString(16) + "0000000000000000" )}})
আপনি যদি একটি ব্যাপ্তি ক্যোয়ারী করতে চান তবে আপনি এই পোস্টে এটি করতে পারেন । উদাহরণস্বরূপ একটি নির্দিষ্ট দিনের জন্য জিজ্ঞাসা করা (অর্থাত 4 এপ্রিল 2015):
> var objIdMin = ObjectId(Math.floor((new Date('2015/4/4'))/1000).toString(16) + "0000000000000000")
> var objIdMax = ObjectId(Math.floor((new Date('2015/4/5'))/1000).toString(16) + "0000000000000000")
> db.collection.find({_id:{$gt: objIdMin, $lt: objIdMax}}).pretty()
ডকুমেন্টেশন থেকে:
o = new ObjectId()
date = o.getTimestamp()
এইভাবে আপনার তারিখটি আইএসডেট।
দেখুন http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Extractinsertiontimesfromidratherthanhavingaseparatetimestampfield । আরও তথ্যের জন্য
মঙ্গোবজেক্টআইডি ব্যবহার করে আপনার নীচের মত ফলাফলও খুঁজে পাওয়া উচিত
db.mycollection.find({ _id: { $gt: ObjectId("5217a543dd99a6d9e0f74702").getTimestamp().getTime()}});
রেলগুলিতে mongoidআপনি ব্যবহার করে জিজ্ঞাসা করতে পারেন
time = Time.utc(2010, 1, 1)
time_id = ObjectId.from_time(time)
collection.find({'_id' => {'$lt' => time_id}})