uses for mongodb ObjectId creation time
I suppose since MongoDB ObjectId contain a timestamp, you can sort by 'created date' if you will sort by objectId:
items.find.sort( [['_id', -1]] ) // get all items desc by created date.
And if you want last 30 created items you can use following query:
items.find.sort( [['_id', -1]] ).limit(30) // get last 30 createad items
I am actualy not sure,i just suppose that ordering by _id should work as described above. I'll create some tests later.
Update:
Yes it is so. If you order by _id you will automatically order by _id created date. I've done small test in c#, mb someone interest in it:
public class Item { [BsonId] public ObjectId Id { get; set; } public DateTime CreatedDate { get; set; } public int Index { get; set; } } [TestMethod] public void IdSortingTest() { var server = MongoServer.Create("mongodb://localhost:27020"); var database = server.GetDatabase("tesdb"); var collection = database.GetCollection("idSortTest"); collection.RemoveAll(); for (int i = 0; i <= 500; i++) { collection.Insert(new Item() { Id = ObjectId.GenerateNewId(), CreatedDate = DateTime.Now, Index = i }); } var cursor = collection.FindAllAs<Item>(); cursor.SetSortOrder(SortBy.Descending("_id")); var itemsOrderedById = cursor.ToList(); var cursor2 = collection.FindAllAs<Item>(); cursor2.SetSortOrder(SortBy.Descending("CreatedDate")); var itemsOrderedCreatedDate = cursor.ToList(); for (int i = 0; i <= 500; i++) { Assert.AreEqual(itemsOrderedById[i].Index, itemsOrderedCreatedDate[i].Index); }}
Yes, you can use the generation_time of BSON ObjectId for the purposes you want. So,
db.collection.find().sort({ _id : -1 }).limit(10)
will return the last 10 created items. However, since the embedded timestamps have a one second precision, multiple items within any second are stored in the order of their creation.
The code to convert a DateTime to its corresponding timestamp with the c# driver is as follows:
public static ObjectId ToObjectId(this DateTime dateTime) { var timestamp = (int)(dateTime - BsonConstants.UnixEpoch).TotalSeconds; return new ObjectId(timestamp, 0, 0, 0); }
More info here: http://www.danharman.net/2011/10/26/mongodb-ninjitsu-using-objectid-as-a-timestamp/