반응형
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
반응형
'programing' 카테고리의 다른 글
VBA Match에서 오류 2042가 표시되는 이유는 무엇입니까? (0) | 2023.07.04 |
---|---|
파이썬 세트에서 무작위로 2개의 아이템을 고르려면 어떻게 해야 하나요? (0) | 2023.07.04 |
DropDownList의 ListItems 특성이 포스트백 시 손실됩니까? (0) | 2023.06.29 |
함수를 사용하여 두 날짜 사이의 날짜 목록 가져오기 (0) | 2023.06.29 |
MariaDB Galera Cluster 노드가 디스크에 많이 액세스하여 성능이 크게 저하됨 (0) | 2023.06.29 |