반응형
지난 n일 이내에 모든 문서 찾기
나의daily
컬렉션에는 다음과 같은 문서가 있습니다.
..
{ "date" : ISODate("2013-01-03T00:00:00Z"), "vid" : "ED", "san" : 7046.25, "izm" : 1243.96 }
{ "date" : ISODate("2013-01-03T00:00:00Z"), "vid" : "UA", "san" : 0, "izm" : 0 }
{ "date" : ISODate("2013-01-03T00:00:00Z"), "vid" : "PAL", "san" : 0, "izm" : 169.9 }
{ "date" : ISODate("2013-01-03T00:00:00Z"), "vid" : "PAL", "san" : 0, "izm" : 0 }
{ "date" : ISODate("2013-01-03T00:00:00Z"), "vid" : "CTA_TR", "san" : 0, "izm" : 0 }
{ "date" : ISODate("2013-01-04T00:00:00Z"), "vid" : "CAD", "san" : 0, "izm" : 169.9 }
{ "date" : ISODate("2013-01-04T00:00:00Z"), "vid" : "INT", "san" : 0, "izm" : 169.9 }
...
나는 여기에 공간을 확보하기 위해 _id 필드를 했습니다.제 업무는 "지난 15일 이내에 모든 문서를 가져오는 것"입니다.보시다시피, 어떻게든 해야 합니다.
- 15개의 고유한 날짜를 얻습니다.최신 문서는 수집 중인 최신 문서로 간주해야 합니다(즉, 오늘 날짜는 필요하지 않고 날짜 필드를 기준으로 수집 중인 최신 문서일 뿐입니다). 가장 오래된 문서입니다.음, 아마도 쿼리에서 가장 오래된 날을 엄격하게 정의할 필요는 없을 것입니다. 제가 필요로 하는 것은 가장 새로운 날부터 시작하는 일종의 상위 15위입니다. 제 말이 무슨 뜻인지 알고 있다면요.특별한 15일.
- db.daily.find(15일 범위의 날짜 필드를 가진 모든 문서).
결과적으로, 저는 가장 최근에 수집된 문서부터 시작하여 15일 이내에 모든 문서를 봐야 합니다.
방금 귀사의 데이터 샘플에 대해 다음 쿼리를 테스트했는데 완벽하게 작동했습니다.
db.datecol.find(
{
"date":
{
$gte: new Date((new Date().getTime() - (15 * 24 * 60 * 60 * 1000)))
}
}
).sort({ "date": -1 })
시작 위치Mongo 5
운영자에게 유용한 사용 사례입니다.
// { date: ISODate("2021-12-05") }
// { date: ISODate("2021-12-02") }
// { date: ISODate("2021-12-02") }
// { date: ISODate("2021-11-28") } <= older than 5 days
db.collection.aggregate([
{ $match: {
$expr: {
$gt: [
"$date",
{ $dateSubtract: { startDate: "$$NOW", unit: "day", amount: 5 } }
]
}
}}
])
// { date: ISODate("2021-12-05") }
// { date: ISODate("2021-12-02") }
// { date: ISODate("2021-12-02") }
와 함께$dateSubtract
우리는 빼기를 통해 문서를 보관하는 가장 오래된 날짜를 만듭니다.5
(amount
)"days"
(unit
) 현재 날짜를 벗어남(startDate
).
그리고 당신은 분명히 추가할 수 있습니다.$sort
날짜별로 문서를 정렬하는 단계입니다.
고유한 날짜를 모두 가져오려면 고유 명령을 실행해야 합니다.다음은 예입니다."values" 배열에는 클라이언트 측에서 최근 15일을 검색해야 하는 컬렉션의 모든 고유한 날짜가 있습니다.
db.runCommand ( { distinct: 'datecol', key: 'date' } )
{
"values" : [
ISODate("2013-01-03T00:00:00Z"),
ISODate("2013-01-04T00:00:00Z")
],
"stats" : {
"n" : 2,
"nscanned" : 2,
"nscannedObjects" : 2,
"timems" : 0,
"cursor" : "BasicCursor"
},
"ok" : 1
}
그런 다음 1단계부터 가장 최근의 15일이 있는 $in 연산자를 사용합니다.다음은 언급된 두 날짜 중 하나에 속하는 모든 문서를 찾는 예제입니다.
db.datecol.find({
"date":{
"$in":[
new ISODate("2013-01-03T00:00:00Z"),
new ISODate("2013-01-04T00:00:00Z")
]
}
})
언급URL : https://stackoverflow.com/questions/15572607/find-all-documents-within-last-n-days
반응형
'programing' 카테고리의 다른 글
부모 프로세스를 통해 자식 프로세스를 죽이는 방법은 무엇입니까? (0) | 2023.07.01 |
---|---|
void를 반환하는 ASP.Net MVC 컨트롤러 작업 (0) | 2023.07.01 |
t-sql에서 'execute'를 사용하여 변수로 값을 설정하는 방법은 무엇입니까? (0) | 2023.07.01 |
클라이언트와 서버에 공통 알고리즘(ASP.NET C# VB Visual Basic IIS TLS 1.0 / 1.1 / 1.2)이 없기 때문에 통신할 수 없습니다. (0) | 2023.07.01 |
불안정한 연결에서 대규모 프로젝트에 대한 깃 클론을 완료하는 방법은 무엇입니까? (0) | 2023.07.01 |