我有一个带有嵌套数组的 Firestore 数据结构,并且我正在努力寻找一种有效的方法来根据这些嵌套数组中的供应商和产品条件查询文档。
这是数据结构的简化版本:
"configurations": {
"CVE_data_version": "4.0",
"nodes": [
{
"operator": "OR",
"children": [],
"cpe_match": [
{
"vulnerable": true,
"vendor": "redhat",
"product": "enterprise_linux:",
"cpe23Uri": "cpe:2.3:o:redhat:enterprise_linux:8.0:*:*:*:*:*:*:*",
"cpe_name": []
}
]
},
// Other nodes
]
}
我需要根据 cpe_match 数组中的供应商和产品条件高效地查询文档。
查询尝试:
const cveQuery = query(
cveCollectionRef,
where('configurations.nodes', 'array-contains', {
'cpe_match': {
'vendor': 'redhat',
'product': 'enterprise_linux'
}
})
);
有没有办法按供应商和产品查询,嵌套查询?
正如我在您的文档架构中看到的,
cpe_match
是自定义对象的数组。在 Firestore 中,您无法根据对象数组中存在的两个属性来查询集合。您无法使用部分数据进行查询。为了能够过滤数据,您应该将整个对象传递给 where()
函数,而不仅仅是一些部分数据。该对象应包含所有字段的值。由于这很可能不是您想要的,最简单的解决方案是将这些对象从数组中取出,并将它们添加为 @DougStevenson 在他的评论中提到的,作为集合中的单独文档。通过这种方式,您将能够在单个查询中链接两个或多个 where()
调用。