查找过去X天的记录

时间:2017-09-08 12:58:09

标签: mongodb

我试图在讨论集中记录过去7天,但它根本不会给我任何记录

这是我用来查询的内容

db.discussions.find( { "date_added": { $gte: new Date((new Date().getTime() - (15 * 24 * 60 * 60 * 1000))) } } );

date_added字段是ISODate

"date_added" : ISODate("2017-06-14T12:49:14Z")

我尝试在线搜索解决方案,但我找不到任何内容

1 个答案:

答案 0 :(得分:0)

您的查询看起来有效。

我用这两个文件创建了一个集合:

/* 1 */
{
    "_id" : ObjectId("59b2a55e574088f47d0faa0b"),
    "name" : "before",
    "date_added" : ISODate("2017-08-31T12:49:14.000Z")
}

/* 2 */
{
    "_id" : ObjectId("59b2a56c574088f47d0faa0f"),
    "name" : "after",
    "date_added" : ISODate("2017-09-07T12:49:14.000Z")
}

我已经运行了这个查询:

db.getCollection('sample').find(
    {"date_added": 
         { 
            // (7 * 24 * 60 * 60 * 1000) is 7 days of millis
            $gte: new Date((new Date().getTime() - (7 * 24 * 60 * 60 * 1000))) 
        }
    })

这与您使用的查询形式相同,并返回一个文档:

{
    "_id" : ObjectId("59b2a56c574088f47d0faa0f"),
    "name" : "after",
    "date_added" : ISODate("2017-09-07T12:49:14.000Z")
}

使用.explain()运行该查询清楚地表明,已解析的查询包含date_added谓词的正确派生值:

    "parsedQuery" : {
        "date_added" : {
            "$gte" : ISODate("2017-09-01T14:16:45.489Z")
        }
    }

所有这些都表明你没有获得任何记录的原因在于其他地方。例如:

  • 肯定您的收藏集中至少有一个文件,其中包含date_added> T-15d
  • 您的查询是否包含可能导致相关文档被排除的其他条件?
  • 您正在查询的集合中的文档中data_added 肯定是一个ISODate吗?