[英]Correct way to create json from neo4j rest API
I want to create the following json我想创建以下 json
"model":[
{
"_id": 123,
"innerMode1": [
{
"_id": 233,
"_type": "somtype2",
"innerMode2": [
{
"_id": 24533,
"_type": "somtype3",
"innerMode2": [
{ ....this goes on till depth of 6
}
]
}
]
}
], "_id": 45123,
"innerMode2": [
{
"_id": 23433,
"_type": "somtype2",
"innerMode2": [
{
"_id": 241233,
"_type": "somtype3",
"innerMode2": [
{
....this goes on till depth of 6
}
]
}
]
}
]
.
.
.
.
.
1000 records
cypher something like:密码类似于:
MATCH (c:Capability{SectorID:{varSectorID}})-[r1:CapabilityAdopts_Capability]->(d)-[r2:Capability_Capability]->(e)-[r3:Capability_Capability]->(f)
OPTIONAL MATCH (f)<-[r3:Capability_Capability]-(g)
OPTIONAL MATCH (f)-[r4:KPI_Capability]-(h)
RETURN c,labels(c),r1,Type(r1),d,labels(d),r2,Type(r2),e,labels(e),r3,Type(r3),f,labels(f),r4,Type(r4),g,labels(g),r5,Type(r5),h,labels(h)
CapabilityAdopts_Capability = innerModel1,
CapabilityAdopts_Capability = innerModel1,
Capability_Capability = innerModel2 (direction of arrows are differnt hence data is different)
Capability_Capability = innerModel2(箭头方向不同因此数据不同)
Capability_Capability = innerMode13 (direction of arrows are differnt hence data is different)
Capability_Capability = innerMode13(箭头方向不同因此数据不同)
Capability_Capability = innerMode14 (direction of arrows are differnt hence data is different)
Capability_Capability = innerMode14(箭头方向不同因此数据不同)
var capObjectsContainer= {
model: []
};
var mainContainerL2 = jsonData.results[4].data; //this comes from neo after running the above cypher
for (i = 0; i < mainContainerL2.length; i++) {
var isPartOfCapabilityContainer = {
isPartOfCapability: []
};
var capIsMeasuredByKPIPatternContainer = {
cpbltyIsMsrdByKpiPttrn: []
};
var consistsOfCapContainer = {
consistsOfCapability: []
};
var isconsistsOfCap2Present = false;
for (j = 0; j < capObjectsContainer.model.length; j++) {
if (mainContainerL2[i].row[0]["ExternalID"] == capObjectsContainer.model[j]["_id"]) {
for (k = 0; k < capObjectsContainer.model[j].adoptsCapability.length; k++) {
if (mainContainerL2[i].row[4]["ExternalID"] == capObjectsContainer.model[j].adoptsCapability[k]["_id"]) {
for (l = 0; l < capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability.length; l++) {
if (mainContainerL2[i].row[8]["ExternalID"] == capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability[l]["_id"]) {
for (m = 0; m < capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability[l].consistsOfCapability.length; m++) {
if (mainContainerL2[i].row[12]["ExternalID"] == capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability[l].consistsOfCapability[m]["_id"]) {
if (mainContainerL2[i].row[20] != null)
AddcapIsMeasuredByKPIPattern(capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability[l].consistsOfCapability[m].cpbltyIsMsrdByKpiPttrn, mainContainerL2[i].row[20], mainContainerL2[i].row[21])
if (mainContainerL2[i].row[16] != null && !IsExternalIdPresent(capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability[l].consistsOfCapability[m].isPartOfCapability, mainContainerL2[i].row[16]))
AddIsPartOfCap(capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability[l].consistsOfCapability[m].isPartOfCapability, mainContainerL2[i].row[16], mainContainerL2[i].row[17])
isconsistsOfCap2Present = true;
break;
}
}
if (!isconsistsOfCap2Present) {
if (mainContainerL2[i].row[20] != null)
AddcapIsMeasuredByKPIPattern(capIsMeasuredByKPIPatternContainer.cpbltyIsMsrdByKpiPttrn, mainContainerL2[i].row[20], mainContainerL2[i].row[21])
if (mainContainerL2[i].row[16] != null)
AddIsPartOfCap(isPartOfCapabilityContainer.isPartOfCapability, mainContainerL2[i].row[16], mainContainerL2[i].row[17])
if (mainContainerL2[i].row[12] != null)
AddConsistsOfCap(capObjectsContainer.model[j].adoptsCapability[k].consistsOfCapability[l].consistsOfCapability, mainContainerL2[i].row[12], mainContainerL2[i].row[13], isPartOfCapabilityContainer.isPartOfCapability, capIsMeasuredByKPIPatternContainer.cpbltyIsMsrdByKpiPttrn, consistsOfCapContainer.consistsOfCapability)
}
break;
}
}
}
}
}
}
}
requirement is there cannot be a round trip to neo.要求是不能往返neo。 I can hit neo only once and get data.
我只能点击neo一次并获取数据。 I dont like the above code which i wrote (though it creates json exactly as I want).
我不喜欢我写的上述代码(尽管它完全按照我的意愿创建了 json)。 is there a better cypher query that I can use to accomplish what I want?
有没有更好的密码查询可以用来完成我想要的? I want to get rid of all the loops.
我想摆脱所有的循环。 Any functions that I can use or property that can help me here?
我可以使用的任何功能或属性可以在这里帮助我?
You can use collect + map and collection syntax to create something like you describe in a single cypher statement, you'd start at the lowest level and then work your way upwards aggregating along your paths.您可以使用 collect + map 和 collection 语法来创建类似于您在单个 cypher 语句中描述的内容,您将从最低级别开始,然后沿着您的路径向上聚合。
Unfortunately I was not able to follow your explanation.不幸的是,我无法按照您的解释进行操作。
Here is a link to a article that explains it in detail:这是详细解释它的文章的链接:
http://gist.neo4j.org/?9269173 http://gist.neo4j.org/?9269173
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.