sql >> Base de Datos >  >> NoSQL >> MongoDB

usos para el tiempo de creación de mongodb ObjectId

Supongo que dado que MongoDB ObjectId contiene una marca de tiempo, puede ordenar por 'fecha de creación' si ordena por objectId:

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

Y si desea los últimos 30 elementos creados, puede utilizar la siguiente consulta:

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

En realidad, no estoy seguro, solo supongo que ordenar por _id debería funcionar como se describe anteriormente. Crearé algunas pruebas más tarde.

Actualización:

Sí, así es. Si ordena por _id, ordenará automáticamente por _id fecha de creación. Hice una pequeña prueba en c #, alguien interesado en 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);
   }
}