mongodb - MongoDB创建数组内键的所有文本值的索引
问题描述
我正在尝试为以下键的文本值生成 mongodb 索引CVE_data_meta
:vendor_name
和product_name
. 这些值是数组的一部分。
我的代码如下:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}).then(() => {
db.close();
我遇到的问题是'namespace name generated from index name "vulndbapi.nvd.$cve.affects.vendor.vendor_data.vendor_name_text_cve.affects.vendor.vendor_data.product.product_data.product_name_text_cve.CVE_data_meta.ID_text" is too long (127 byte max)'
。此外,如果我只是尝试按 CVE id 进行索引,则搜索查询将为空。
样本数据集。实际的数据集要大得多。
{
"cve": {
"data_type": "CVE",
"data_format": "MITRE",
"data_version": "4.0",
"CVE_data_meta": {
"ID": "CVE-2012-0001",
"ASSIGNER": "cve@mitre.org"
},
"affects": {
"vendor": {
"vendor_data": [{
"vendor_name": "microsoft",
"product": {
"product_data": [{
"product_name": "windows_7",
"version": {
"version_data": [{
"version_value": "-",
"version_affected": "="
}]
}
},
{
"product_name": "windows_server_2003",
"version": {
"version_data": [{
"version_value": "*",
"version_affected": "="
}]
}
}
]
}
}]
}
}
}
}
我的查询代码是
col.find({
$text: {
$search: 'CVE-2012-0001'
// $search: 'firefox'
}
}).then((resolve) => {
console.log(resolve);
db.close();
当值是数组的一部分时,如何生成索引,并索引该数组的所有项目?最终集合将超过 50K 项
解决方案
索引的默认名称是包含字段的连接名称,在您的情况下最终会太长。解决方案是为索引提供您自己的名称:
col.createIndex({
'cve.affects.vendor.vendor_data.vendor_name': 'text',
'cve.affects.vendor.vendor_data.product.product_data.product_name': 'text',
'cve.CVE_data_meta.ID': 'text'
}, {name: 'vendor_product_text_index'})
推荐阅读
- python - 正则表达式模式字符串上的双引号导致正则表达式搜索失败
- python - 在 Python Scikit-Learn 中训练测试拆分得分高但 CV 得分低
- python - 模拟 - 体素网格
- flutter - Flutter Dart 将字符串从另一个列表变成列表
- android - 展开时我们可以让 ExtendedFloatingActionButton 宽度匹配父级吗?
- r - 一起接收top的个数和输入的row
- vb.net - 我如何使用带有等待代码的进度条?
- neural-network - 是否有任何浏览器内的在线工具来标记图像中的对象有界框以训练神经网络?
- python - Scrapy 在与浏览器请求相同的请求中获得 400 Bad Request
- google-apps-script - 从 Gsuite 中的共享/委托邮箱获取收件箱信息