복붙노트

[MONGODB] 나는 MongoDB를 ObjectId가 날짜별로 조회 할 수 있습니까?

MONGODB

나는 MongoDB를 ObjectId가 날짜별로 조회 할 수 있습니까?

나는하며 Object 그들이에 생성 된 날짜를 포함하는 것을 알고있다. ObjectId가의 이러한 측면을 조회 할 수있는 방법이 있습니까?

해결법

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

    1.훌륭한 세부 사항에 ObjectId가에 포함 된 날짜를 기준으로하며 Object 커버 쿼리에 타임 스탬프 터지는.

    훌륭한 세부 사항에 ObjectId가에 포함 된 날짜를 기준으로하며 Object 커버 쿼리에 타임 스탬프 터지는.

    자바 스크립트 코드에서 간단히 :

    // This function returns an ObjectId embedded with a given datetime
    // Accepts both Date object and string input
    
    function objectIdWithTimestamp(timestamp) {
        // Convert string date to Date object (otherwise assume timestamp is a date)
        if (typeof(timestamp) == 'string') {
            timestamp = new Date(timestamp);
        }
    
        // Convert date object to hex seconds since Unix epoch
        var hexSeconds = Math.floor(timestamp/1000).toString(16);
    
        // Create an ObjectId with that hex timestamp
        var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");
    
        return constructedObjectId
    }
    
    
    // Find all documents created after midnight on May 25th, 1980
    db.mycollection.find({ _id: { $gt: objectIdWithTimestamp('1980/05/25') } });
    
  2. ==============================

    2.pymongo에서는이 방법을 수행 할 수 있습니다 :

    pymongo에서는이 방법을 수행 할 수 있습니다 :

    import datetime
    from bson.objectid import ObjectId
    mins = 15
    gen_time = datetime.datetime.today() - datetime.timedelta(mins=mins) 
    dummy_id = ObjectId.from_datetime(gen_time)
    result = list(db.coll.find({"_id": {"$gte": dummy_id}}))
    
  3. ==============================

    3.Node.js를 년에 MongoDB를 드라이버에 의해 제공되는 붙박이 기능을 사용하면 임의의 타임 스탬프를 질의 할 수 있습니다 :

    Node.js를 년에 MongoDB를 드라이버에 의해 제공되는 붙박이 기능을 사용하면 임의의 타임 스탬프를 질의 할 수 있습니다 :

    var timestamp = Date.now();
    var objectId = ObjectID.createFromTime(timestamp / 1000);
    

    또한, 현재 시간 전에 기록을 검색, 당신은 간단하게 할 수 있습니다 :

    var objectId = new ObjectID(); // or ObjectId in the mongo shell
    

    출처 : http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html

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

    4.ObjectId가의 첫 번째 4 바이트 타임 스탬프를 나타 내기 때문에, 연대순으로 컬렉션, ID로 간단하게 순서를 쿼리합니다 :

    ObjectId가의 첫 번째 4 바이트 타임 스탬프를 나타 내기 때문에, 연대순으로 컬렉션, ID로 간단하게 순서를 쿼리합니다 :

    # oldest first; use pymongo.DESCENDING for most recent first
    items = db.your_collection.find().sort("_id", pymongo.ASCENDING)
    

    당신이 문서를 얻을 후, 당신은과 같이 ObjectId가의 생성 시간을 얻을 수 있습니다 :

    id = some_object_id
    generation_time = id.generation_time
    
  5. ==============================

    5.어떻게 (이 일이 최신 [2015년 1월 12일]를 [2015년 1월 15일]) 명령을 찾기 찾을 수 있습니다 :

    어떻게 (이 일이 최신 [2015년 1월 12일]를 [2015년 1월 15일]) 명령을 찾기 찾을 수 있습니다 :

    명령을 (이 날짜 [2015년 1월 15일]이 최신 [2015년 1월 12일을]) 개수 :

    (이 날짜 [2015년 1월 15일]이 최신 [2015년 1월 12일을]) 명령을 제거합니다 :

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

    6.당신은 4.0 버전부터 ObjectId가에서 날짜를 추출 $ 변환 기능을 사용할 수 있습니다.

    당신은 4.0 버전부터 ObjectId가에서 날짜를 추출 $ 변환 기능을 사용할 수 있습니다.

    같은 뭔가

    $convert: { input: "$_id", to: "date" } 
    

    당신은 날짜의 시작 시간과 종료 시간 사이에 비교 날짜를 조회 할 수 있습니다.

    db.collectionname.find({
      "$expr":{
        "$and":[
          {"$gte":[{"$convert":{"input":"$_id","to":"date"}}, ISODate("2018-07-03T00:00:00.000Z")]},
          {"$lte":[{"$convert":{"input":"$_id","to":"date"}}, ISODate("2018-07-03T11:59:59.999Z")]}
        ]
      }
    })
    

    또는

    당신은 사용할 수 속기 $ TODATE은 동일을 달성 할 수 있습니다.

    db.collectionname.find({
      "$expr":{
        "$and":[
          {"$gte":[{"$toDate":"$_id"}, ISODate("2018-07-03T00:00:00.000Z")]},
          {"$lte":[{"$toDate":"$_id"},ISODate("2018-07-03T11:59:59.999Z")]}
        ]
      }
    })
    
  7. ==============================

    7.내가 쉘에서 쿼리 아래 사용 몽고 컬렉션 지난 60 일 이전 문서를 얻으려면.

    내가 쉘에서 쿼리 아래 사용 몽고 컬렉션 지난 60 일 이전 문서를 얻으려면.

    db.collection.find({_id: {$lt:new ObjectId( Math.floor(new Date(new Date()-1000*60*60*24*60).getTime()/1000).toString(16) + "0000000000000000" )}})
    
  8. ==============================

    8.당신이 범위 쿼리를 만들고 싶은 경우에, 당신은이 게시물처럼 그것을 할 수 있습니다. 특정 일 (즉, 4 월 4 2015)에 대한 예를 들어 쿼리의 경우 :

    당신이 범위 쿼리를 만들고 싶은 경우에, 당신은이 게시물처럼 그것을 할 수 있습니다. 특정 일 (즉, 4 월 4 2015)에 대한 예를 들어 쿼리의 경우 :

    > var objIdMin = ObjectId(Math.floor((new Date('2015/4/4'))/1000).toString(16) + "0000000000000000")
    > var objIdMax = ObjectId(Math.floor((new Date('2015/4/5'))/1000).toString(16) + "0000000000000000")
    > db.collection.find({_id:{$gt: objIdMin, $lt: objIdMax}}).pretty()
    
  9. ==============================

    9.문서에서 :

    문서에서 :

    o = new ObjectId()
    date = o.getTimestamp()
    

    이 방법 당신은 ISODate이다 날짜를 가지고있다.

    보다 http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Extractinsertiontimesfromidratherthanhavingaseparatetimestampfield. 자세한 내용은

  10. ==============================

    10.아래에 주어진 MongoObjectID를 사용하면 당신은 또한 결과를 찾을 수 있어야

    아래에 주어진 MongoObjectID를 사용하면 당신은 또한 결과를 찾을 수 있어야

    db.mycollection.find({ _id: { $gt: ObjectId("5217a543dd99a6d9e0f74702").getTimestamp().getTime()}});
    
  11. from https://stackoverflow.com/questions/8749971/can-i-query-mongodb-objectid-by-date by cc-by-sa and MIT license