В настоящее время я работаю над проектом, в котором я использую MongoDB для хранения моих данных. Обе коллекции имеют следующий формат:Regex like search in mongo db nestex query
CVE
{
"Modified" : "2014-09-27T06:55:04.867-04:00",
"Published" : "2014-09-27T06:55:04.867-04:00",
"_id" : ObjectId("542923711bb35a10e3053986"),
"cvss" : "9.3",
"cwe" : "Unknown",
"id" : "CVE-2014-3062",
"last-modified" : "2014-09-29T09:00:35.803-04:00",
"references" : [
"http://xforce.iss.net/xforce/xfdb/93540",
"http://www-01.ibm.com/support/docview.wss?uid=swg21683609"
],
"summary" : "Unspecified vulnerability in IBM Security QRadar SIEM 7.1 MR2 and 7.2 MR2 allows remote attackers to execute arbitrary code via unknown vectors.",
"vulnerable_configuration" : [
"cpe:/a:ibm:qradar_security_information_and_event_manager:7.1.0",
"cpe:/a:ibm:qradar_security_information_and_event_manager:7.2.0"
]
}
mgmt_whitelist
{
"_id" : ObjectId("548855641bb35a2dc5675244"),
"id" : "cpe:/a:ibm:qradar_security_information_and_event_manager:7.2.0"
}
Я хотел бы, чтобы найти все элементы в ССО с уязвимой конфигурации в mgmt_whitelist, которые я могу легко достичь, используя:
db.cves.find(
{'vulnerable_configuration':
{'$in': db.mgmt_whitelist.distinct('id')}
}
).sort({Modified: -1}).limit(10)
Однако белый список также содержит записи, как
{
"_id" : ObjectId("54885ff41bb35a2f57a7c567"),
"id" : "cpe:/a:7-zip:7-zip"
}
, который является форматом СР без версии. Я хотел бы иметь возможность выполнять поиск в виде регулярных выражений, так что эти белые элементы также можно найти в поиске.
Я попытался
db.cves.find(
{'vulnerable_configuration':
{'$in':
{'$regex':db.mgmt_whitelist.distinct('id')
}
}
).sort({Modified: -1}).limit(10)
, но это не работает ... Что я должен делать вместо этого?
Спасибо заранее,
Pidgey
Для каждого отдельного идентификатора 'whitelist' вам нужно создать объект' regex', в зависимости от того, как вам нужно сопоставлять. Затем вы можете выполнить его как: '({weak_configuration: {$ in: [RegexOne, RegexTwo, ...]}})' – BatScream