插入和查询date与MongoDB和Nodejs

我需要一些帮助在mongodb和nodejs中按date查找logging。

我把这个date添加到一个刮脚本的json对象中,如下所示:

jsonObj.last_updated = new Date(); 

这个对象被插入到mongodb中。 我可以看到如下:

  "last_updated" : "2014-01-22T14:56:59.301Z" 

然后在我的nodejs脚本中,我做了一个findOne():

  var jObj = JSON.parse(line.toString()); collection.findOne(jObj,function(err, doc) { if (doc){ console.log(doc._id); } else { console.log('not found'); } }); 

该对象未find。 如果我从对象中删除last_updated字段,那么它肯定是问题所在。

如果我把这个领域隔离如下:

 collection.findOne({last_updated: '2014-01-22T14:56:59.301Z'},function(err, doc) { if (doc){ console.log(doc._id); } else { console.log('not found'); } }); 

没有东西可以回来 请问我做错了什么?

谢谢。

您需要传递一个date对象而不是datestring。

 collection.findOne({last_updated: new Date('2014-01-22T14:56:59.301Z')},function(err, doc) { 

MongoDB驱动将把它转换成ISODate

 { "_id" : ObjectId("52dfe0c469631792dba51770"), "last_updated" : ISODate('2014-01-22T14:56:59.301Z') } 

检查这些问题:

  • MongoDB + nodejs:如何查询ISODate字段?
  • ISODate没有定义

澄清。 重要的是要知道的是:

  • 是的,你必须传递一个Javascriptdate对象。
  • 是的,它必须是ISODate友好
  • 是的,从我的经验得到这个工作,你需要操纵ISO的date
  • 是的,使用date通常是一个乏味的过程,mongo也不例外

下面是一段代码,我们做了一些date操作,以确保Mongo能正确处理它。 在这个例子中,我使用mongoose模块,并希望date属性小于(即之前)作为myDate参数给定的date行的结果。

 var inputDate = new Date(myDate.toISOString()); MyModel.find({ 'date': { $lte: inputDate } })