如何让node-neo4j仅返回带有数据的节点

时间:2014-06-10 17:09:10

标签: node.js neo4j node-neo4j

我使用node-neo4j连接到neo4j图数据库。 我注意到每当我尝试获取所有节点(例如用户)时,json结果返回的信息太多,我不需要。

以下是返回所有用户节点的代码:

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服务器中不需要的部分?

谢谢!

3 个答案:

答案 0 :(得分: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);
    });
};

我更改了返回新用户(结果['用户'] ['数据']),并成功返回"数据&# 34;回应的一部分。

答案 1 :(得分:1)

您可以更新查询以返回字段而不是节点...

...
RETURN user.uid, user.name

这会使你的结果集更多地成为字段的数据“网格” - 但听起来就像你正在寻找的那样

答案 2 :(得分: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。只是顺便说一句,我不得不向JSON添加一个结束]以使其工作。