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);
        });
    }); 
    });

しかし、URLを入力すると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 に答える