2013-01-21 58 views
0

我有一個MongoDB的集合稱爲燈光和文檔中的這個集合的樣子,查找包含最接近MongoDB中傳遞的參數值的文件+ Node.js的

{ 
    "_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分十七秒的文檔存在。

如何告訴mongodb找到包含最接近傳遞參數值的文檔。

+0

時間不是一個ObjectId,所以它沒有轉換。 – WiredPrairie

+0

MongodB不支持您嘗試在本地執行的操作(2D地理空間索引除外)。您可能必須執行範圍查詢,然後根據時間跨度對結果進行排序(並限制這些結果)。雖然感覺有點笨重,但這對大多數數據庫來說都是一個挑戰。 – WiredPrairie

回答

0

首先你應該使用日期而不是字符串。我建議使用javascript日期對象用單個日期時間字段替換日期和時間字段,因爲這樣可以讓您在mongodb上的查詢中使用日期。如果您需要匹配網址中的時間,您只需將該字符串映射到日期對象,以便查詢文檔。