neo4j - 使用“apoc.load.json”将 json 加载到 Neo4j 中:数据检索不完整
问题描述
我正在尝试从 mongodb 集合中检索 json 数据并将其创建为 neo4j 中的标签。我正在使用 mongo REST API 从 mongodb 检索 json。我关注了 William Lyon 关于“MongoDB 和 Neo4j 的多语言持久性”的链接文本。
问题是我无法加载所有数据。以下是json数据的格式。
> db.cves.findOne()
{
"_id" : ObjectId("5a37226550eb46004dea39b0"),
"vulnerable_configuration_cpe_2_2" : [
"cpe:/o:bsdi:bsd_os:3.1",
"cpe:/o:freebsd:freebsd:1.0",
"cpe:/o:freebsd:freebsd:1.1",
"cpe:/o:freebsd:freebsd:1.1.5.1",
"cpe:/o:freebsd:freebsd:1.2",
"cpe:/o:freebsd:freebsd:2.0",
"cpe:/o:freebsd:freebsd:2.0.1",
"cpe:/o:freebsd:freebsd:2.0.5",
"cpe:/o:freebsd:freebsd:2.1.5",
"cpe:/o:freebsd:freebsd:2.1.6",
"cpe:/o:freebsd:freebsd:2.1.6.1",
"cpe:/o:freebsd:freebsd:2.1.7",
"cpe:/o:freebsd:freebsd:2.1.7.1",
"cpe:/o:freebsd:freebsd:2.2",
"cpe:/o:freebsd:freebsd:2.2.2",
"cpe:/o:freebsd:freebsd:2.2.3",
"cpe:/o:freebsd:freebsd:2.2.4",
"cpe:/o:freebsd:freebsd:2.2.5",
"cpe:/o:freebsd:freebsd:2.2.6",
"cpe:/o:freebsd:freebsd:2.2.8",
"cpe:/o:freebsd:freebsd:3.0",
"cpe:/o:openbsd:openbsd:2.3",
"cpe:/o:openbsd:openbsd:2.4"
],
"impact" : {
"integrity" : "NONE",
"availability" : "PARTIAL",
"confidentiality" : "NONE"
},
"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"
],
"cvss" : 5,
"references" : [
"http://www.openbsd.org/errata23.html#tcpfix"
],
"Modified" : ISODate("2010-12-16T00:00:00Z"),
"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.",
"cwe" : "CWE-20",
"Published" : ISODate("1999-12-30T00:00:00Z"),
"cvss-time" : ISODate("2004-01-01T00:00:00Z"),
"access" : {
"vector" : "NETWORK",
"authentication" : "NONE",
"complexity" : "LOW"
},
"id" : "CVE-1999-0001"
}
>
以下查询工作正常
//Load CPE collection from CVEDB of mongodb as CVE Label
CALL apoc.load.json('http://127.0.0.1:28017/cvedb/cves/') YIELD value
UNWIND value.rows as cveData
MERGE (c:CVE{_id:cveData._id['$oid']})
ON Create set c.id=cveData.id, c.cvss = cveData.cvss
输出:
Added 1000 labels, created 1000 nodes, set 2970 properties, completed after 462 ms.
问题:
> db.cves.count();
99022
集合中有 99022 条记录,为什么在我的密码查询中只创建了 1000 个节点而不是 99022?
谢谢
解决方案
仅创建 1000 个节点的一些可能原因:
MERGE
如果已经存在匹配的节点,则不会创建新节点。所以也许你已经有了一些匹配的节点。- 如果多个 CVE 具有相同的
cveData._id['$oid']
值,那么这些 CVE中最多有一个会创建一个新节点。
但是,我不知道如果创建了 1000 个节点,为什么只设置了 2970 个属性。考虑到您的 Cypher 代码,我预计会设置 3000 个属性。
推荐阅读
- android - MaterialAlertDialogBuilder 的 setMessage 在模拟器中有效,但在物理设备上无效
- python - Pandas - 转换数据类型
- python - Python 元组和 extend() 方法
- html - 出现特定文本时从视图中删除 div
- python - 具有全息视图和散景的等高线图
- asp.net-core - ASP.NET Core 3.1 Startup.cs 如何在将类添加到服务集合之前对其进行初始化
- java - 为什么 GZIP“os”标头在 Java 中被硬编码为 FAT?
- javascript - Lodash groupby, step value, sum and sort together for order book group on objects array
- c++ - 使用 C++ 模板切换算法
- indexing - 如何在 Tableau 中对属于同一列值的行进行编号