Iamはnode.jsを使用して、mongodbデータベースにクエリを実行するAPIを作成します。モンゴには、フィールド:タイムスタンプと値:2021-02-04T00:27:04.505-0300
などがあります。
私のルートでは、その部分を含むすべてのエントリを取得したいだけです2021-02-04
。ルートで正規表現を使用しようとしましたが、機能しません。
ルートクエリで正規表現を使用してmongodbをクエリするためのヒントを誰かに教えてもらえますか?param:dia
は正規表現を実行したい場所であり、呼び出すURLは次のとおりです。
http://127.0.0.0.1:3400/vulns/severity/server01/2021-02-04/High
(そして、私はすべてを得ることを期待vulns
からserver01
とHigh
日から重大度2021-02-04
。)
私のルートコードは以下のとおりですが/req.params.dia/
、正規表現のように認識されません。
router.get('/severity/:name/:dia/:sev', async (req, res) => {
try {
const logues = await vulnerability.find({'agent.name': req.params.name,'timestamp': /req.params.dia/,'data.vulnerability.severity': req.params.sev});
res.json(logues)
} catch (err) {
res.status(500).json({ message: err.message })
}
})
APIを使おうとすると、mongodbに次のクエリが表示されます。
[conn177] command XXX.vulnerabilities command: find { find: "vulnerabilities", filter: { agent.name: "server01", timestamp: /req.params.dia/, data.vulnerability.severity: "High" }, projection: {}, returnKey: false, showRecordId: false } planSummary: COLLSCAN keysExamined:0 docsExamined:6279 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:49 nreturned:0 reslen:128 locks:{ Global: { acquireCount: { r: 100 } }, Database: { acquireCount: { r: 50 } }, Collection: { acquireCount: { r: 50 } } } protocol:op_query 15ms
timestamp
MongoDBのフィールドのタイプはDate型だと思います。たとえば、あなた2021-02-04T00:27:04.505-0300
は単なる文字列表現です。その場合、範囲ごとに行われる日付を検索する必要があります。一日の範囲は、その日のゼロ秒から翌日のゼロ秒までです。
router.get('/severity/:name/:dia/:sev', async (req, res) => {
let startDate = new Date(req.params.dia + 'T00:00:00Z'); // '021-02-04' becomes '021-02-04T00:00:00Z'
let endDate = new Date(startDate.valueOf());
endDate.setDate(endDate.getDate() + 1);
try {
const logues = await vulnerability.find({
'agent.name': req.params.name,
'timestamp': /req.params.dia/,
timestamp: {
$gte: startDate,
$lt: endDate
}
'data.vulnerability.severity': req.params.sev
});
res.json(logues)
} catch (err) {
res.status(500).json({ message: err.message })
}
})
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加