日期查询适用于_id但不适用于Date值 - MongoDB

时间:2013-11-01 12:15:17

标签: mongodb

所以,我从小就开始尝试这个,但没有得到任何结果。

我有一个日期值为"scrape_systemTime"的MongoDB集合,我将其插入scrape_systemTime : new Date()

我试图通过使用以下方法获得一周大的结果:

db.scrape.find({scrape_systemTime: { $lt: new Date( Date.now() - 86400000*7)}})

哪个应该返回一组看起来像下面的Object的文档,但它什么都不返回。 (查看"scrape_systemTime"属性,该属性的日期较早。)

[{
        "newspaperID" : "6",
        "scrape_systemTime" : "Fri Oct 25 2013 13:14:10 GMT+0000 (UTC)",
        "_id" : ObjectId("526a6ea1985ba76408000010"),
        "languageID" : "1",
        "scrape_tabs_title" : "India",
        "scrape_tabs_href" : "http://www.indianexpress.com/supplement/India/798/",
        "scrape_thumb" : "images/default/noimage.jpg",
        "scrape_href" : "http://www.indianexpress.com/news/political-parties-woo-chhattisgarh-youth-on-facebook-whatsapp/1187180/",
        "scrape_title" : "Political parties woo Chhattisgarh youth on Facebook, WhatsApp",
        "scrape_largeimage" : "http://static.indianexpress.com/m-images/Fri Oct 25 2013, 17:57 hrs/M_Id_433064_facebook.jpg",
        "scrape_detail_article_text" : "",
        "scrape_newstime" : "PTI : Raipur, Fri Oct 25 2013, 18:11 hrs",
        "scrape_status" : "Pending",
        "viewCount" : 0,
        "error_log" : "OK",
        "ip" : "192.168.0.101"
}, ...]

但是如果我使用_id作为日期条件,即使用一周的时间戳创建ObjectId()并在查询中使用如下:

db.scrape.find({_id: { $lt: ObjectId( Math.floor( new Date( Date.now() - 86400000*7 ) / 1000 ).toString(16) + '0000000000000000')}})

它会返回预期的结果。

为什么会这样?第一个查询语法中有什么问题吗?

Image here

感谢。

1 个答案:

答案 0 :(得分:2)

文档中的scrape_systemTime字段是一个字符串,而不是Date,它解释了您的查询无效的原因。

因此,您必须按照自己的想法插入自己的文档,因为如果您将该字段插入其中,您将获得这样的字符串:

scrape_systemTime: Date()