查找包含与mongodb+;中传递的参数最接近的值的文档;node.js

查找包含与mongodb+;中传递的参数最接近的值的文档;node.js,node.js,mongodb,express,node-mongodb-native,Node.js,Mongodb,Express,Node Mongodb Native,我有一个叫做lights的mongodb集合,这个集合中的一个文档看起来像 { "_id": "50eea4a53004cc6233d12b02", "Physicalentity": "Light", "Sensor": "Tinkerforge", "Unit": "Lux", "value": "47.2", "time": "12:23:17", "date": "10.01.2013" }, 我想根据时间检索一个文档,为此,

我有一个叫做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);
        });
    }); 
    });
但是当我输入URL
http://localhost:3000/lights/12:23:17

I get Error:
传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串

问题到底出在哪里

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

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

它不在我的收藏中,但存在一个时间为12:23:17的文档


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

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

时间不是ObjectId,因此无法转换。MongodB不支持您在本地尝试执行的操作(二维地理空间索引除外)。您可能需要执行范围查询,然后根据时间跨度对结果进行排序(并限制这些结果)。虽然感觉有点笨重,但这对大多数数据库来说都是一个挑战。