0

我有一个名为lights的mongodb集合,这个集合中的一个文档看起来像,

{
    "_id": "50eea4a53004cc6233d12b02",
    "Physicalentity": "Light",
    "Sensor": "Tinkerforge",
    "Unit": "Lux",
    "value": "47.2",
    "time": "12:23:17",
    "date": "10.01.2013"
  },

我想根据时间检索文档,因此为了实现这一点,我写了以下内容:

    app.get('/lights/:time', function(req, res) {
    var time = req.params.time;
console.log('Retrieving value: ' + time);
db.collection('lightsensor', function(err, collection) {
        collection.findOne({'time':new BSON.ObjectID(time)}, function(err, item) {
            res.send(item);
        });
    }); 
    });

但是当我输入网址时http://localhost:3000/lights/12:23:17

我得到错误:Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

问题究竟出在哪里?

是否可以输入时间并允许 mongodb 查找 URL 中指定的时间最近的文档。

例如,我输入http://localhost:3000/lights/12:23:20

这不在我的收藏中,但存在时间为 12:23:17 的文档。

我如何告诉 mongodb 找到包含最接近传递参数的值的文档。

4

1 回答 1

0

首先,您应该使用 Date 作为时间而不是字符串。我建议使用 javascript 日期对象将日期和时间字段替换为单个日期时间字段,因为这样您就可以在 mongodb 的查询中使用日期。如果您需要匹配 url 中的时间之类的内容,您只需将该字符串映射到日期对象,以便查询文档。

于 2013-01-30T15:09:13.723 回答