2013-03-22 65 views
7

每天收藏有像證件的所有文件:內找到最近n天

.. 
{ "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天內獲取所有文檔」。正如你可以看到我需要某種方式:

  1. 獲取15個獨特日期。最新的應該作爲收藏中的最新文件(我的意思是今天的日期沒有必要,它只是基於日期字段收集的最新的一個),以及最古老的..也許它是沒有必要嚴格定義查詢中最古老的一天,我需要的是從最新的一天開始的某種top15,如果你知道我的意思。像15 獨特天。
  2. db.daily.find()所有文件,其中有日期字段在15天的範圍內。

因此,我應該在15天內從最新的集合中看到所有文檔。

我該怎麼做?

謝謝

回答

25

我只是測試對你的數據樣本以下查詢它完​​美地工作:

db.datecol.find(
{ 
    "date": 
    { 
     $gte: new Date((new Date().getTime() - (15 * 24 * 60 * 60 * 1000))) 
    } 
} 
).sort({ "date": -1 }) 
+0

謝謝。它真的幫助:) – 2017-06-24 10:59:43

0

你需要運行distinct命令讓所有的獨特的日期。下面是例子。在「值」數組的集合中的所有獨特的日期從您需要檢索客戶端的最最近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 
} 

然後你可以在最近的15個日期使用$in操作步驟1 。下面是一個例子,它查找屬於上述兩個日期之一的所有文檔。

db.datecol.find({ 
    "date":{ 
    "$in":[ 
     new ISODate("2013-01-03T00:00:00Z"), 
     new ISODate("2013-01-04T00:00:00Z") 
     ] 
    } 
})