插入和查询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 } })