2014-06-10 3 views
1

neo4j 그래프 데이터베이스에 연결하기 위해 node-neo4j를 사용하고 있습니다. 모든 노드 (예 : 사용자)를 가져올 때마다 json 결과 리턴이 필요하지 않은 정보를 너무 많이 가지고 있음을 발견했습니다. 여기 node-neo4j 데이터 반환 노드를 얻는 방법

모든 사용자 노드를 반환하는 코드입니다 :

User.getAll = function (callback) { 
    var query = [ 
     'MATCH (user:User)', 
     'RETURN user', 
    ].join('\n'); 

    db.query(query, null, function (err, results) { 
     if (err) return callback(err); 
     var users = results.map(function (result) { 
      return new User(result['user']); 
     }); 
     callback(null, users); 
    }); 
}; 

그리고 그것은 나에게이 json으로 respsonse 준을;

[ 
{ 
    "_node": { 
     "_nodeNeo4j": { 
      "version": "1.1.0", 
      "constructor": "Node" 
     }, 
     "_data": { 
      "extensions": {}, 
      "outgoing_relationships": "http://localhost:7474/db/data/node/13/relationships/out", 
      "labels": "http://localhost:7474/db/data/node/13/labels", 
      "all_typed_relationships": "http://localhost:7474/db/data/node/13/relationships/all/{-list|&|types}", 
      "traverse": "http://localhost:7474/db/data/node/13/traverse/{returnType}", 
      "self": "http://localhost:7474/db/data/node/13", 
      "property": "http://localhost:7474/db/data/node/13/properties/{key}", 
      "properties": "http://localhost:7474/db/data/node/13/properties", 
      "outgoing_typed_relationships": "http://localhost:7474/db/data/node/13/relationships/out/{-list|&|types}", 
      "incoming_relationships": "http://localhost:7474/db/data/node/13/relationships/in", 
      "create_relationship": "http://localhost:7474/db/data/node/13/relationships", 
      "paged_traverse": "http://localhost:7474/db/data/node/13/paged/traverse/{returnType}{?pageSize,leaseTime}", 
      "all_relationships": "http://localhost:7474/db/data/node/13/relationships/all", 
      "incoming_typed_relationships": "http://localhost:7474/db/data/node/13/relationships/in/{-list|&|types}", 
      "data": { 
       "uid": "53c7a820-f0b4-11e3-af63-28373723792e", 
       "name": "user1" 
      } 
     } 
    } 
}, 

어쨌든 사이퍼의 결과 중 "데이터"부분 만 반환하겠습니까? 또는 결과를 클라이언트에 반환하기 전에 node.js 서버에서 불필요한 부분을 제거해야합니까?

감사합니다.

는 대신 노드의 필드를 반환하는 쿼리를 업데이트 할 수

답변

2

찾고있는 '

User.getAll = function (callback) { 
var query = [ 
    'MATCH (user:User)', 
    'RETURN user', 
].join('\n'); 

db.query(query, null, function (err, results) { 
     if (err) return callback(err); 
     var users = results.map(function (result) { 
      return new User(result['user']['data']); 
     }); 
     callback(null, users); 
    }); 
}; 

을 다음과 같이 반환 나는 새로운 돌아가 변경 사용자 (result [ 'user'] [ 'data']) 그리고 성공적으로 응답의 "데이터"부분을 반환합니다.

+0

더 좋은 방법이 있나요? – hrusli

+0

더 나은 방법은 노드의 속성 만 반환하는 새로운 트랜잭션 cypher 끝점을 사용하는 것입니다. docs.neo4j.org/chunked/milestone/rest-api-transactional.html –

1

...

는 는 당신의 결과를 만들 것

는 데이터 '그리드'분야의 더 많은 세트

... 
RETURN user.uid, user.name 
- 그게 무슨입니다 그러나 그것은 소리처럼 나는 응답을 변경하여 바로 데이터 필드를 반환하는 관리

+0

이 작동하지만 노드의 모든 속성/필드를 반환하려면 어떻게해야합니까? 예를 들어 나는 10 개의 필드를 가지고 있고 그것들 모두를 반환하고 싶다. thanks – hrusli

+0

노드의 속성 이름 (또는 값을 포함하는지도)의 목록을 반환하는 현재 기능이없는 것 같습니다. 흥미롭게도 직접 ​​휴식 API를 사용하는 경우 : http://docs.neo4j.org/chunked/stable/rest-api-node-properties.html#rest-api-get-properties-for-node 특정 노드의 속성 목록을 가져옵니다. –

0

나는 지난 주에 어려움을 겪고있었습니다. 간단히 말해 JSON의 특정 부분에 변수를 설정할 수 있습니다.

var anything =JSON.stringify(results[0]._node._data.data); 그 라인은 {\"uid\":\"53c7a820-f0b4-11e3-af63-28373723792e\",\"name\":\"user1\"}을 반환했습니다. 내 예를 여기에서 확인하십시오. Trying to interpret the Node-Neo4j API. 그냥 btw, 내가 작동하도록하려면 JSON에 가까운 ]을 추가해야했습니다.