用于mongodb ObjectId创建时间

在mongodb文档中用作默认键的ObjectId具有嵌入的时间戳(调用objectid.generation_time返回一个datetime对象)。因此,可以使用这个生成时间,而不是保持单独的创建时间戳?您将如何通过创建时间排序或使用此嵌入式时间戳有效地查询最后N个项目?
我想,由于MongoDB ObjectId包含时间戳,你可以按’创建日期’排序,如果你将按objectId排序:

items.find.sort( [['_id', -1]] ) // get all items desc by created date.

如果你想要最后30个创建的项目,你可以使用以下查询:

items.find.sort( [['_id', -1]] ).limit(30) // get last 30 createad items 

我实际上不确定,我只是假设由_id的排序应该如上所述工作。我稍后将创建一些测试。

更新:

是的,是这样。如果您通过_id订购,您将通过_id创建日期自动排序。
我做了小测试在c#,mb有人感兴趣:

  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);
   }
}
http://stackoverflow.com/questions/5125521/uses-for-mongodb-objectid-creation-time

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:用于mongodb ObjectId创建时间