2016-11-18 181 views
2

我有一个猫鼬架构与timestamp选项设置为true。问题与猫鼬时间戳和时代转换为日期()

schema = new mongoose.Schema({ 
    ... 
}, 
{ timestamps: true }); 

现在我有一个Android应用程序,获得使用System.currentTimeMillis()其中工程一切都很好,给我的毫秒数,因为UNIX纪元时间的时间戳。

我将这些数据发送到我的Node.js/Express服务器,该服务器只需要时间并返回在该特定日期之后创建的文档。

// get all docs 
router.get('/api/seekers', function(req, res) { 
    Seeker.find({createdAt:{ $gt: new Date(req.query.timestamp) }}, function(err, seekers) { 
     if(err) 
      res.send(err); 
     else 
      res.json(seekers); 
    }); 
}); 

所以我送https://api_url.com/api/seekers?timestamp=1479431351762作为对服务器的请求。

现在一对夫妇的事情发生了:

  1. 我送以毫秒为单位的值,并得到这个错误

    {"message":"Cast to date failed for value \"Invalid Date\" at path \"updatedAt\"","name":"CastError","kind":"date","value":null,"path":"updatedAt"}

    调查的一点点后,原来你需要将秒数传递给Date()。所以,

  2. 我将值除以1000得到秒(req.query.timestamp/1000)。现在我没有收到错误,但查询约束不起作用。我从开始的时候就掌握了所有的价值。

  3. 我搬了蒙戈外壳,检查问题是否仍然存在,对此事实证明它因为我可以在毫秒值传递给蒙戈的日期:

    > new Date(1479431351762) ISODate("2016-11-18T01:09:11.762Z")

    但是,如果我试图穿过第二值Date(),事实证明它实际上是送我刚开始的时候:

    > new Date(1479431351) ISODate("1970-01-18T02:57:11.351Z")

我无法弄清楚,我能做些什么服务器请求和猫鼬正确处理时间戳和查询我的数据库?

+1

有你试过铸造查询字符串来诠释为'Seeker.find({createdAt:{$ GT,新的日期(parseInt函数(req.query.timestamp))}},函数(呃,求职者){...}'? – chridam

+0

呃,呃,应该是我尝试的第一件事,无论如何,谢谢! – doberoi96

回答

2

任何有相同问题的流浪者,可能错过了chridam的评论,您只需在解析之前将传递的时间戳投射到int。这工作:

new Date(parseInt(req.query.timestamp))