2016-08-26 5 views
1

내 앱은 매일 다양한 크기로 웹 페이지의 스크린 샷을 찍습니다. 페이지 및 화면 크기는 작업에서 설정됩니다. 각 작업은 캡처 할 페이지의 배열과 각 페이지를 캡처 할 화면 크기 목록을 지정합니다.MongoDB 매칭 조건의 첫 번째 항목을 선택하십시오.

앱이 부팅 될 때마다 자동으로 각 활성 작업에 대한 모든 스크린 샷을 다시 가져옵니다. 아직 그날의 스크린 샷을 아직받지 못한 경우를 대비하여. 즉, 동일한 작업, 페이지 및 스크린 세이즈를위한 스크린 샷을 같은 날에 두 번 이상 만들 수 있습니다.

스크린 샷을 볼 때 나는 같은 job, pagescreensize 속성을 사용하여 최대 한 번만 반환하려고합니다. 이렇게하려면 매일 실행되는 쿼리를 작성하고 해당 날짜에 둘 이상의 샷이 있는지 확인해야합니다. 이 경우 가장 나중에있는 dateTaken 속성 만 반환하십시오.

여기에 $group을 사용해야하는지 잘 모르겠습니다. $group으로 몇 가지 다른 쿼리를 시도했지만 모든 샷을 단일 결과로 결합하거나 찍은 날짜에 상관없이 모든 스크린 샷을 반환했습니다. 한마디로

const ScreenshotSchema = new Schema({ 
    job: { 
     type: Schema.Types.ObjectId, 
     ref: 'Job', 
     required: true 
    }, 
    dateTaken: { 
     type: Date, 
     required: true 
    }, 
    page: { 
     type: Schema.Types.ObjectId, 
     ref: 'Page', 
     required: true 
    }, 
    screensize: { 
     type: Schema.Types.ObjectId, 
     ref: 'Screensize', 
     required: true 
    } 
}); 

, 내가 필요한 것은 : 작업, 페이지, 화면 크기

답변

1

I의 독특한 조합 당 하나 개의 항목 여기

는 스크린 샷 스키마의 그룹화가 올바른 접근법이라고 생각하십시오 : 하나는 각 그룹에 대한 최신 샷을 취합니다. 이것은 다음 $first 연산자 최신 샷 따기, $group 전에 하강 $sort을 사용함으로써 달성 될 수있다 : 난 그냥 것을 시도

db.collectionname.aggregate(
    [ 
    { 
     "$sort" : { "dateTaken" : -1 } 
    }, 
    { 
     "$group" : { 
     "_id": { 
      job:"$job", 
      page: "$page", 
      screensize: "$screensize", 
      year: { "$year" : "$dateTaken"}, 
      month: { "$month" : "$dateTaken" }, 
      dayOfMonth: { "$dayOfMonth" : "$dateTaken"} 
     }, 
     "shot": { "$first" : "$$ROOT" } 
     } 
    } 
    ] 
) 
+0

를, 그리고 화면 크기, 페이지와 작업에 의한 고유 값을 초래할 않지만, 만 각각의 고유 한 조합에 대해 하나의 결과를 반환하는 반면 고유 한 조합 당 1 일 *을 필요로합니다. – Aron

+0

안녕하세요 아론, 그룹화 키를 추가하여 하루에 그룹화했습니다. –

+0

예, 작동하는 것 같습니다! 이제는 물건을 정리하는 어떤 방법이 있어도'.find ({}) '에서 얻을 수있는 것과 같은 스크린 샷 문서 목록을 얻을 수 있습니다.). 'shot' 객체를 감싸는 문서를 없애기 위해 사후 처리를 추가 할 필요가 없다. – Aron

관련 문제