복붙노트

[MONGODB] MongoDB를은 다음 몽고 쉘에서 ObjectId가에서 날짜 범위 쿼리를 수행

MONGODB

MongoDB를은 다음 몽고 쉘에서 ObjectId가에서 날짜 범위 쿼리를 수행

나는 모습이 좋아하는 컬렉션이 있습니다 :

{
  _id: ObjectId("50a68673476427844b000001"),
  other fields
}

나는 두 날짜 사이에 기록을 찾을 수있는 범위 쿼리를 수행 할. 나는이 몽고 쉘 VAR이 일에 ObjectId가에서 날짜를 얻을 수 있다는 사실을 알고 :

var aDate = ObjectId().getTimestamp()

하지만 (나는 순간에 알아낼 수까지)하는 방법 단지 타임 스탬프 부분으로 구성된 ObjectId가를 만드는이 없다 - 나는 나의 이상적인 솔루션은 생각이 작동하지 않는 몽고 쉘 코드하는 것입니다 :

var minDate = ObjectId(new Date("2012-11-10"));
var maxDate = ObjectId(new Date("2012-11-17"));

범위의 값으로 minDate 및 MaxDate로 찾기를 사용합니다.

쉘이 할 수있는 방법이 있나요 - I 드라이버 제품의 일부에 관심이 아니에요.

해결법

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

    1.당신은 2 단계에서이 작업을 수행 할 수 있습니다

    당신은 2 단계에서이 작업을 수행 할 수 있습니다

     var objIdMin = ObjectId(Math.floor((new Date('1990/10/10'))/1000).toString(16) + "000
    0000000000000")
     var objIdMax = ObjectId(Math.floor((new Date('2011/10/22'))/1000).toString(16) + "000
        0000000000000")
     db.myCollection.find({_id:{$gt: objIdMin, $lt: objIdMax}})
    

    또는 1 단계 (무엇을 덜 읽을 수)에서 :

    db.myCollection.find({_id:{$gt: ObjectId(Math.floor((new Date('1990/10/10'))/1000).toString(16) + "000
        0000000000000"), $lt: ObjectId(Math.floor((new Date('2011/10/10'))/1000).toString(16) + "000
        0000000000000")}})
    
  2. ==============================

    2.몽고 쉘을 사용 :

    몽고 쉘을 사용 :

    당신은 방법에 내장 된 ObjectId.fromDate을 사용할 수 있습니다 :

    db.mycollection.find({_id: {$gt: ObjectId.fromDate( new Date('2017-09-23') ) } });
    

    Node.js를 드라이버에서 :

    다음과 같이 여기 @jksdua가 제공하는 솔루션을 사용할 수 있습니다 :

    db.mycollection.find({_id: {$gt: ObjectID.createFromTime( Date.now()/1000 ) } });
    
  3. from https://stackoverflow.com/questions/13593896/mongodb-perform-a-date-range-query-from-the-objectid-in-the-mongo-shell by cc-by-sa and MIT license