programing

Mongodb: mongo 셸의 ObjectId에서 Date 범위 쿼리 수행

telecom 2023. 7. 4. 21:40
반응형

Mongodb: mongo 셸의 ObjectId에서 Date 범위 쿼리 수행

다음과 같은 컬렉션이 있습니다.

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

두 날짜 사이의 기록을 찾기 위해 범위 조회를 하고 싶습니다.나는 다음과 같은 작업을 통해 mongo shell 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를 범위 값으로 지정한 find를 사용합니다.

셸에서 이를 수행할 수 있는 방법이 있습니까? 저는 일부 드라이버 제품에 관심이 없습니다.

이 작업은 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}})

또는 한 단계로(가독성이 낮은 항목):

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")}})

mongo 셸 사용:

ObjectId.fromDate builtin 메서드를 사용할 수 있습니다.

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 ) } });

언급URL : https://stackoverflow.com/questions/13593896/mongodb-perform-a-date-range-query-from-the-objectid-in-the-mongo-shell

반응형