Загрузка json в Neo4j с использованием «apoc.load.json»: неполный поиск данных - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь получить данные json из коллекции mongodb и создать их как метку в neo4j.Я использую REST API Монго для получения JSON из Mongodb.Я следовал за текстом ссылки Уильяма Лайона на тему «Постоянство полиглота с 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 в моем запросе шифра?

Спасибо

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Некоторые возможные причины, по которым было создано только 1000 узлов:

  1. MERGE не будет создавать новый узел, если соответствующий уже существует. Поэтому, возможно, у вас уже есть несколько совпадающих узлов.
  2. Если несколько CVE имеют одинаковое значение cveData._id['$oid'], то не более , один из этих CVE создаст новый узел.

Однако я не знаю, почему были установлены только 2970 свойств, если было создано 1000 узлов. Я бы ожидал установить 3000 свойств, учитывая ваш код Cypher.

0 голосов
/ 05 июня 2019

Можете ли вы предоставить:

CALL apoc.load.json('http://127.0.0.1:28017/cvedb/cves/') YIELD value
RETURN count(*);

CALL apoc.load.json('http://127.0.0.1:28017/cvedb/cves/') YIELD value
UNWIND value.rows as cveData
RETURN count(*);


CALL apoc.load.json('http://127.0.0.1:28017/cvedb/cves/') YIELD value
UNWIND value.rows as cveData
RETURN count(distinct cveData._id['$oid']);

также

CALL apoc.load.json('http://127.0.0.1:28017/cvedb/cves/') YIELD value
UNWIND value.rows as cveData
RETURN cveData._id LIMIT 1;
...