2017-02-28 100 views

回答

2

考慮運行使用$redact運營商,因爲它可以讓你用一個單一的管道,與$project一個功能納入創建一個代表日期字段的月份和$match到現場聚合管道過濾文件 ,它們與當月12月的給定條件相匹配。

在上文中,$redact使用$cond tenary操作者裝置,以提供條件表達式將創建系統變量,其確實的密文。在$cond邏輯表達式將檢查 的日期操作字段與給定值相等,如果然後$redact匹配將返回使用$$KEEP系統變量的文件,並且丟棄以其它方式使用$$PRUNE

運行下面的管道應該給你想要的結果:

db.myCollection.aggregate([ 
    { 
     "$redact": { 
      "$cond": [ 
       { "$eq": [{ "$month": "$Date" }, 12] }, 
       "$$KEEP", 
       "$$PRUNE" 
      ] 
     } 
    } 
]) 

這類似於$project + $match組合,但你需要再選擇的所有的休息進入管道的領域:

db.myCollection.aggregate([ 
    { 
     "$project": { 
      "month": { "$month": "$Date" }, 
      "field1": 1, 
      "field2": 1, 
      ..... 
     } 
    }, 
    { "$match": { "month": 12 } } 
]) 

有了另一種選擇,雖然速度慢查詢,使用find()方法和$where爲:

db.myCollection.find({ "$where": "this.Date.getMonth() === 11" }) 
0

這應該工作在12月查找記錄的某一年,如果這是足以滿足你的目的。

db.myCollection.find({ 
    "Date":{ 
     $gte:new Date("2016-12-01T00:00:00Z"), 
     $lt:new Date("2017-01-01T00:00:00Z") 
}})