2016-09-11 1 views
1

와 매치 조작 나는 다음과 같은 목적을 가지고 :MongoDB의 :의 dayOfWeek 필터

{ 
    ... 
    "junctionId" : "6301", 
    "ts" : ISODate("2016-08-10T11:17:47.000Z") 
    ... 
} 

내가 일주일의 특정 일의 타임 스탬프가없는 문서를 필터링 할. 나는 이것에 의해

을 할 수

db.getCollection('phasedata-test').aggregate([ 
{ $match : { 
    ts : { $gte : ISODate('2016-08-18T21:00:00.000Z'), $lte: ISODate('2016-08-25T21:30:00.000Z') }, 
    junctionId : { $eq : "6301"}} 
}, 
{ 
    $sort: {ts : 1} 
}, 

{ "$group": { 
    "_id": { 
     "year": { "$year": "$ts" }, 
     "month": { "$month": "$ts" }, 
     "day": { "$dayOfMonth": "$ts" }, 
     "hour": { "$hour": "$ts" }, 
     "interval": { 
      "$subtract": [ 
       { "$minute": "$ts" }, 
       { "$mod": [{ "$minute": "$ts"}, 15 ] } 
      ] 
     } 
    }, 
    "dayOfWeek": { "$first": { "$dayOfWeek": "$ts" }}, 
    } 
}, 

{ $match :{ 
    "dayOfWeek" : { $eq : 5}} 
} 

id grouping 보지 마십시오. 그것은 내 질문에 필요합니다.

문서 수가 많을 수 있으므로 처리 할 문서 수를 줄이고 싶습니다. 어떻게 요일 필터 먼저 일치 작업에 사용할 수 있습니까? 필드 dayOfWeek 기지 문서를 추가 : 관련

답변

0

가장 강력한 솔루션은 가장 쉬운 하나가 될 것으로

.

하면 거기에 인덱스를 생성 ... 모든 것이 완벽한 :-)에게 쉬운 방법이었다

=================

를 작동 -하지만 비용이 든다 - ts 필드가 업데이트 될 때마다 dayOfWeek도 업데이트해야합니다.

+0

그래,이 솔루션은 어떤면에서는 우아 할 것이지만 객체 모델은 이미 개발되었고 코드도 작성되었으므로 변경을 너무 많이 원하지는 않습니다. – nurgasemetey