Mongoose使用Timestamp作为参数搜索FindOne

时间:2016-01-21 12:23:48

标签: node.js mongodb

如何通过使用时间戳进行搜索来搜索 mongoDB 集合中的文档?

使用终端我得到了deisred结果:

db.posts.findOne({"created_at":ISODate("2016-01-20T01:28:23.825Z")})

但是在 mongoose 我该怎么做,按时间戳搜索

我尝试将时间用于精确格式(ISO),但没有用。

router.get('/posts/:id', function(req, res){
        Posts.findOne({'created_at': req.params.id}, function(err, data){
            console.log(req.params.id);
            res.json(data);
        })
    })

//req.params.id = 2016-01-20T01:28:23.825Z

在我的 帖子 架构中created_at: { type: Date, default: Date.now }

我想过用一些变量:

 `Posts.find({'created_at': {"gte": new Date(2016, 7, 14) }}, function(err, data){}`

但是这会返回数组或者只是我可以为时间添加另一个参数吗?

1 个答案:

答案 0 :(得分:1)

在您的查询中,您直接使用req.params.id字符串类型。 MongoDB / Mongoose在这里没有做一些魔术来将字符串转换为日期,因此您的查询尝试将字符串与MongoDB中存储的日期值进行匹配。要解决您的问题,请先将req.params.id转换为日期:

router.get('/posts/:id', function(req, res){
    Posts.findOne({'created_at': new Date(req.params.id)}, function(err, data){
        console.log(req.params.id);
        res.json(data);
    })
})