Во-первых, заблаговременно за это прочитайте. Во-вторых, извините заранее за длинный пост, но я надеюсь, что как хорошо написанная функция, хороший материал наверху, хотя, пожалуйста, найдите время, чтобы прочитать все. В-третьих, я потерял информацию о том, сколько вопросов о стеке я просмотрел - если это все еще вопрос о нобе, я приношу свои извинения.Разборный комплекс JSON от Neo4j
Я использую Node.js для предоставления api для моего клиента AngularJS. Вся моя агрегировка и преобразование данных будут выполняться в узле и представлять клиенту плоскую структуру данных JSON.
У меня есть модель Neo4j, которая связывает меня с приложениями, за которые я несу ответственность, и связывает технические риски со всеми приложениями. У меня есть хороший запрос Cypher, который показывает мне технические риски только для приложений, за которые я несу ответственность, и исключает все мои другие приложения, которые не имеют никакого риска. Вот мой результат: Neo4j Graph result.
Вот мой код Node.js (routes.js файл называется основным файлом api.js):
var router = require('express').Router();
var neo4j = require('neo4j');
var db = new neo4j.GraphDatabase('http://user:[email protected]:7474');
router.get('/techrisks', getTechRisks);
module.exports = router;
function getTechRisks(req, res) {
db.cypher({
query: 'MATCH p=(a)-[e:ARCHITECT_FOR]->(b)-[d:HAS_RISK]->(c) WHERE a.shortname="macdonb" RETURN nodes(p) AS n,relationships(p) AS m',
params: {
}
}, function (err, results) {
if (err) { throw err; }
var result = results[0];
if (!result) {
console.log('No TechRisk found.');
} else {
console.log(results);
console.log(results[0]);
console.log(results[1]);
}
});
}
Код выше получается следующий JSON (с разделителями, добавленных в кусках для удобства чтения) Производит следующие результаты:
- - - - console.log(results); - - - -
[ { n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] } ]
- - - - console.log(results[0]); - - - -
{ n:
[ Node { _id: 585, labels: [Object], properties: [Object] },
Node { _id: 675, labels: [Object], properties: [Object] },
Node { _id: 695, labels: [Object], properties: [Object] } ],
m:
[ Relationship {
_id: 845,
type: 'ARCHITECT_FOR',
properties: [Object],
_fromId: 585,
_toId: 675 },
Relationship {
_id: 813,
type: 'HAS_RISK',
properties: [Object],
_fromId: 675,
_toId: 695 } ] }
- - - - console.log(results[1]); - - - -
{ n:
[ Node { _id: 585, labels: [Object], properties: [Object] },
Node { _id: 674, labels: [Object], properties: [Object] },
Node { _id: 689, labels: [Object], properties: [Object] } ],
m:
[ Relationship {
_id: 844,
type: 'ARCHITECT_FOR',
properties: [Object],
_fromId: 585,
_toId: 674 },
Relationship {
_id: 810,
type: 'HAS_RISK',
properties: [Object],
_fromId: 674,
_toId: 689 } ] }
N: array меня пугает. Я начал разворачивать его вручную (попытка разбиения и сращивания со строками и объектами соответственно), но я считаю, что он должен быть доступен с помощью парсера json. Когда я использую следующие как тест:
var tmpResult1 = JSON.stringify(result.n);
Я получаю большое строковое представление п:
[{"_id":585,"labels":["Person"],"properties":{"hrpno":"00061627","lastName":"MacDonald","title":"Consultant, IT Architecture","hrdno":"104134","shortname":"macdonb","role":"Systems Architect","displayName":"Bruce MacDonald","firstName":"Bruce"}},{"_id":650,"labels":["Application"],"properties":{"dateverified":"2016-01-19","name":"Portal - Loss Runs","aprmid":"aprm1249"}},{"_id":683,"labels":["TechRisk"],"properties":{"status":"Documented","riskid":"ABC-2012-082","dateEntered":"2012-06-29"}}]
Строка это хорошо, но когда я пытаюсь ссылаться на массив точек или скобки, которые я получаю много «неопределенных» ошибок.
Я немного потерял и готов к тому, чтобы провести еще один или два перерыва. Я искал учебники на YouTube - «около 49 300 результатов» (!!!), а 30+ я смотрел, что все они имеют дело с простыми структурами и используют «Кино» в качестве примера.
Снова спасибо за это! Я ценю любую помощь или подсказки.
Я пробовал и получил следующую ошибку: console.log (result [0] .n [0] .properties.lastName); ^ TypeError: Не удается прочитать свойство 'п' неопределенной в D: \ Development \ ps_jwt \ апи \ routes.js: 205: 34 в D: \ Development \ ps_jwt \ апи \ node_modules \ Neo4j \ Lib новый \ GraphDatabase.js: 301: 18 Я включил ответ о том, как я в конечном итоге работал через стек массивов и объектов, хотя это все еще не лучшее решение. Благодаря! –
@BruceMacDonald Я забыл 's' в результате. Я отредактировал свой ответ. – Shanoor
добавление сработало. Я согласен, что ответ, который я придумал, был запутан. Мне нужны почти все свойства трех узлов и 2 отношения, которые возвратили результаты. Спасибо, что упростили это! –