我有一个将 timestamp
选项设置为 true 的 Mongoose 模式。
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
作为请求发送到服务器。
现在发生了一些事情:
我以毫秒为单位发送值并收到此错误
{"message":"Cast to date failed for value\"Invalid Date\"at path\"updatedAt\"","name":"CastError","kind":"date","value":null,"path":"updatedAt"}
经过一些调查,发现您需要将秒数传递给
Date()
。所以,我将该值除以 1000 得到秒数 (
req.query.timestamp/1000
)。现在我没有收到错误,但查询约束不起作用。我从一开始就获得了所有值(value)。我转移到 Mongo shell 来检查问题是否仍然存在,事实证明它没有,因为我可以将毫秒值传递给 Mongo 的日期:
> 新日期(1479431351762) ISODate("2016-11-18T01:09:11.762Z")
但如果我尝试将第二个值传递给
Date()
,结果实际上是将我发送到时间的开始:> 新日期(1479431351) ISODate("1970-01-18T02:57:11.351Z")
我无法弄清楚,我该怎么做才能让服务器请求和 mongoose 正确处理时间戳并查询我的数据库?
最佳答案
有同样问题的游子,可能错过了chridam的评论,你只需要在解析之前将传递的时间戳转换为 int
。这有效:
新日期(parseInt(req.query.timestamp))
关于android - Mongoose 时间戳和纪元转换为 Date() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679972/