查找包含与mongodb+;中传递的参数最接近的值的文档;node.js
我有一个叫做lights的mongodb集合,这个集合中的一个文档看起来像查找包含与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" }, 我想根据时间检索一个文档,为此,
{
"_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);
});
});
});
但是当我输入URLhttp://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不支持您在本地尝试执行的操作(二维地理空间索引除外)。您可能需要执行范围查询,然后根据时间跨度对结果进行排序(并限制这些结果)。虽然感觉有点笨重,但这对大多数数据库来说都是一个挑战。