2013-03-22 106 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") 
     ] 
    } 
})