Home > Enterprise >  Mongodb get new values from collection without timestamp
Mongodb get new values from collection without timestamp

Time:03-14

I want to fetch added new values from mongodb collections without timestamp value. I guess only choice using objectid field. I using test dataset on github. "https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json" For example if I add new data to this collection, how ı fetch or how ı find these new values. Some mongodb collections using timestamp value, and I use this timestamp value for get new values. But ı do not know, how ı find without timestamp. Example dataset ; enter image description here

I want like this filter. but it doesn't work

{_id: {$gt: '622e04d69edb39455e06d4af'}}

CodePudding user response:

If you don't want to create a new field in the document.

SomeGlobalObj = ObjectId[] // length limit is 10
 // you will need Redis or other outside storage if you have multi server
SomeGlobalObj.shift(newDocumentId)
SomeGlobalObj = SomeGlobalObj.slice(0,10)
//Make sure to keep the latest 10 IDs.

Now, if you want to retrieve the latest document, you can use this array.

If the up-to-date thing you're talking about is, disappears after checking, you can remove it from this array after query.

CodePudding user response:

In the comments you mentioned that you want to do this using Python, so I shall answer from that perspective.

In Mongo, an ObjectId is composed of 3 sections:

  • a 4-byte timestamp value, representing the ObjectId's creation, measured in seconds since the Unix epoch
  • a 5-byte random value generated once per process. This random value is unique to the machine and process.
  • a 3-byte incrementing counter, initialized to a random value

Because of this, we can use the ObjectId to sort or filter by created timestamp. To construct an ObjectId for a specific date, we can use the following code:

gen_time = datetime.datetime(2010, 1, 1)
dummy_id = ObjectId.from_datetime(gen_time)
result = collection.find({"_id": {"$lt": dummy_id}})

Source: objectid - Tools for working with MongoDB ObjectIds

This example will find all documents created before 2010/01/01. Substituting $gt would allow this query to function as you desire.

If you need to get the timetamp from an ObjectId, you can use the following code:

id = myObjectId.generation_time
  • Related