2016-08-26 25 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

我的獨特組合中的一個項目認爲分組是正確的方法:每個組採用最新的鏡頭。這可以通過使用一個下降$sort$group前,然後挑選最新的投籃$first操作來實現:

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

我只是去嘗試,它本身導致的屏幕大小,網頁和工作的獨特價值,但只有它爲每個獨特組合返回一個結果,而我需要每天*一個*每個獨特組合。 – Aron

+0

嗨阿隆,我已經添加了分組鍵,進一步白天進行分組。 –

+0

是的,這似乎工作!現在有什麼方法可以清理東西,以便我可以獲取屏幕截圖文檔的列表(就像你從'.find({})'?獲得的)。我寧願不需要添加後處理來擺脫包裝'shot'對象的文檔 – Aron

相關問題