У меня есть словарь, содержащий тысячи таких элементов:
{
'_id': ObjectId('5e9cd87f8b5ab6d445edab5f'),
'id': 'XXX-YYY-ZZZ',
'Published': datetime.datetime(2020, 2, 25, 18, 15),
'summary': 'Some information',
'subelements': [
"Apple", "Car", "Glass" // Thousands more
]
}
Поле 'subelements' может содержать тысячи строк.
Имея массив подэлементов, я хочу просмотреть все элементы, которые содержат хотя бы один соответствующий подэлемент. Сложность состоит в том, что я хочу отфильтровать подэлементы, содержащие только те значения, которые я искал.
Например, при поиске «Apple» должно возвращаться:
{
'_id': ObjectId('5e9cd87f8b5ab6d445edab5f'),
'id': 'XXX-YYY-ZZZ',
'Published': datetime.datetime(2020, 2, 25, 18, 15),
'summary': 'Some information',
'subelements': [
"Apple"
]
}
// other matches ...
и поиск «Яблоко», «Автомобиль» и т. Е. «Книга» должны вернуть:
{
'_id': ObjectId('5e9cd87f8b5ab6d445edab5f'),
'id': 'XXX-YYY-ZZZ',
'Published': datetime.datetime(2020, 2, 25, 18, 15),
'summary': 'Some information',
'subelements': [
"Apple", "Car"
]
}
// other matches
Правка - некоторые актуальные элементы из моего дела. Я работаю с базой данных CVE и хочу использовать один запрос, чтобы найти CVE для нескольких CPE:
{
"id": "CVE-1999-0001",
"assigner": "cve@mitre.org",
"Published": {
"$date": {
"$numberLong": "946530000000"
}
},
"Modified": {
"$date": {
"$numberLong": "1292475600000"
}
},
"summary": "ip_input.c in BSD-derived TCP/IP implementations allows remote attackers to cause a denial of service (crash or hang) via crafted packets.",
"access": {
"authentication": "NONE",
"complexity": "LOW",
"vector": "NETWORK"
},
"impact": {
"availability": "PARTIAL",
"confidentiality": "NONE",
"integrity": "NONE"
},
"cvss": {
"$numberDouble": "5"
},
"cvss-time": {
"$date": {
"$numberLong": "1292475600000"
}
},
"cvss-vector": "AV:N/AC:L/Au:N/C:N/I:N/A:P",
"references": ["http://www.openbsd.org/errata23.html#tcpfix", "http://www.osvdb.org/5707"],
"vulnerable_configuration": ["cpe:2.3:o:bsdi:bsd_os:3.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.0:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.1.5.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.2:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.0:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.0.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.0.5:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.5:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.6:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.6.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.7:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.7.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.2:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.3:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.4:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.5:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.6:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.8:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:3.0:*:*:*:*:*:*:*", "cpe:2.3:o:openbsd:openbsd:2.3:*:*:*:*:*:*:*", "cpe:2.3:o:openbsd:openbsd:2.4:*:*:*:*:*:*:*"],
"vulnerable_product": ["cpe:2.3:o:bsdi:bsd_os:3.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.0:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.1.5.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:1.2:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.0:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.0.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.0.5:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.5:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.6:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.6.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.7:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.1.7.1:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.2:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.3:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.4:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.5:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.6:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:2.2.8:*:*:*:*:*:*:*", "cpe:2.3:o:freebsd:freebsd:3.0:*:*:*:*:*:*:*", "cpe:2.3:o:openbsd:openbsd:2.3:*:*:*:*:*:*:*", "cpe:2.3:o:openbsd:openbsd:2.4:*:*:*:*:*:*:*"],
"cwe": "CWE-20",
"vulnerable_configuration_cpe_2_2": []
}