복붙노트

[MONGODB] ObjectId가 MongoDB의 작성시에 사용

MONGODB

ObjectId가 MongoDB의 작성시에 사용

ObjectId가는 MongoDB의 문서에서 기본 키가 타임 스탬프를 포함 것처럼 (objectid.generation_time가 날짜 객체를 반환 호출)를 사용. 그래서 별도의 생성 타임 스탬프를 유지하는 대신이 생성 시간을 사용할 수 있습니까? 어떻게 효율적이 포함 된 타임 스탬프를 사용하여 마지막 N 항목에 대한 작성 시간 또는 쿼리를 기준으로 정렬 할 수 있습니까?

해결법

  1. ==============================

    1.MongoDB를 ObjectId가 타임 스탬프를 포함하기 때문에 나는 가정 할 수 있습니다 일종의 '만든 날짜'로 당신이 정렬합니다 OBJECTID에 의한 경우 :

    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 
    

    나는 actualy 확실하지, 난 그냥 전술 한 바와 같이 _id에 의해 그 순서가 작동합니다 생각하고 있습니다. 나중에 몇 가지 테스트를 만듭니다.

    최신 정보:

    네, 그것은 이렇게이다. 당신이 _id로 주문하는 경우는 _id 생성 날짜별로 자동으로 순서 것이다. 나는 C #에서의 테스트, 거기에 메가 누군가의 관심을했습니다 :

      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);
       }
    }
    
  2. ==============================

    2.예, 당신은 당신이 원하는 목적을 위해 BSON ObjectId가의 generation_time를 사용할 수 있습니다. 그래서,

    예, 당신은 당신이 원하는 목적을 위해 BSON ObjectId가의 generation_time를 사용할 수 있습니다. 그래서,

    db.collection.find().sort({ _id : -1 }).limit(10)
    

    지난 10 개 생성 항목을 반환합니다. 내장 된 타임 스탬프 한 제 정밀도를 가지고 있기 때문에, 모든 제 내의 여러 항목들은 생성 된 순서대로 저장된다.

  3. ==============================

    3.다음으로 C #을 드라이버와 이에 대응하는 타임 스탬프로 날짜 시간 변환하는 코드는 다음과 같습니다

    다음으로 C #을 드라이버와 이에 대응하는 타임 스탬프로 날짜 시간 변환하는 코드는 다음과 같습니다

        public static ObjectId ToObjectId(this DateTime dateTime)
        {
            var timestamp = (int)(dateTime - BsonConstants.UnixEpoch).TotalSeconds;
            return new ObjectId(timestamp, 0, 0, 0);
        }
    

    여기에 더 많은 정보 : http://www.danharman.net/2011/10/26/mongodb-ninjitsu-using-objectid-as-a-timestamp/

  4. ==============================

    4.올린 사람 : http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-DocumentTimestamps

    올린 사람 : http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-DocumentTimestamps

    "이 관계는 하나의 초 내의 다중 시스템에서 생성 된 값 ObjectId가 엄격하지 않지만 저장 값 OBJECTID 있다는 _id 필드 분류하면, 생성 시간에 의해 정렬과 거의 동일하다. '

  5. ==============================

    5.보다

    보다

    http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-DocumentTimestamps

    가능성 그러나 나는 항상 대신 어떻게 든 일부 개체 ID에 포함 된 타임 스탬프와 같은 일부 등의 내부에 의존 전용 타임 스탬프를 가진 선호 해 드리겠습니다.

  6. ==============================

    6.7 일 이내에 생성 된 쿼리 프로젝트에, 나는 조각 아래 사용

    7 일 이내에 생성 된 쿼리 프로젝트에, 나는 조각 아래 사용

    db.getCollection('projects').find({
      $where: function() {
        // last 7 days
        return Date.now() - this._id.getTimestamp() < (7 * 24 * 60 * 60 * 1000)
      }
    }).sort({
      '_id': -1
    })
    

    당신이 지정된 필드와 아이템을 얻으려면 :

    db.getCollection('projects').find({
      $where: function() {
        // last 7 days
        return Date.now() - this._id.getTimestamp() < (7 * 24 * 60 * 60 * 1000)
      }
    }).sort({
      '_id': -1
    }).toArray().map(function(item) {
      var res = {};
      res['Project Name'] = item.config.label;
      res['Author'] = item.author;
      res['Created At'] = item._id.getTimestamp().toLocaleDateString();
      res['Last Modified Date'] = item.config.lastModifDate.toLocaleString();
      return res;
    });
    

    그것은 이런 식으로 뭔가를 반환합니다 :

    [{
      "Project Name": "Newsletter",
      "Author": "larry.chen",
      "Created At": "Thursday, January 19, 2017",
      "Last Modified Date": "Thursday, January 19, 2017 17:05:40"
    }...]
    

    추신 : MongoDB를 연결하는 소프트웨어 I 사용은 로보 3T입니다

    이 당신을 도울 것입니다 바랍니다.

  7. from https://stackoverflow.com/questions/5125521/uses-for-mongodb-objectid-creation-time by cc-by-sa and MIT license