2015-09-09 1 views
2

Я хочу создать следующие JSonПравильный способ создания JSON из Neo4j API остальное

"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 

Сайфер что-то вроде:

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,

Capability_Capability = innerModel2 (направление стрелок отличается, следовательно, данные разные)

Capability_Capability = innerMode13 (направление стрелки различно, следовательно, данные отличаются)

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; 
         } 

        } 
       } 
      } 
     } 
    } 
} 

требование не может быть в оба конца до нео. Я могу ударить нео только один раз и получить данные. Мне не нравится приведенный выше код, который я написал (хотя он создает json точно так, как я хочу). есть ли лучший вопрос cypher , который я могу использовать для выполнения того, что хочу? Я хочу избавиться от всех петель. Любые функции, которые я могу использовать, или свойство, которое может помочь мне здесь?

Адрес link.

ответ

1

Вы можете использовать синтаксис collect + map и collection, чтобы создать что-то подобное описанию в одном выражении cypher, вы должны начинать с самого низкого уровня, а затем работать вверх, суммируя по вашим путям.

К сожалению, я не смог следовать вашим объяснениям.

Вот ссылка на статью, которая объясняет это в деталях:

http://gist.neo4j.org/?9269173

+0

Это именно то, что я искал. Спасибо за помощь. – NAS

Смежные вопросы