可以控制Neo4j的房产订单吗?

时间:2013-08-19 16:19:49

标签: neo4j

是否有控制属性顺序的机制?

我无法在http://www.neo4j.org/console

中重现这一点

如果我执行以下操作,请使用Neo4j 1.9.2社区:

CREATE (m1 {`$type`: {moduleTypeName}, Name: 'M1', ModelNumber: 'MN1'})

然后我使用我回来的REST cypher端点从cypher查询中恢复此节点...

{
    "extensions": {},
    "paged_traverse": "http://localhost:7575/db/data/node/3777/paged/traverse/{returnType}{?pageSize,leaseTime}",
    "outgoing_relationships": "http://localhost:7575/db/data/node/3777/relationships/out",
    "traverse": "http://localhost:7575/db/data/node/3777/traverse/{returnType}",
    "all_typed_relationships": "http://localhost:7575/db/data/node/3777/relationships/all/{-list|&|types}",
    "property": "http://localhost:7575/db/data/node/3777/properties/{key}",
    "all_relationships": "http://localhost:7575/db/data/node/3777/relationships/all",
    "self": "http://localhost:7575/db/data/node/3777",
    "properties": "http://localhost:7575/db/data/node/3777/properties",
    "outgoing_typed_relationships": "http://localhost:7575/db/data/node/3777/relationships/out/{-list|&|types}",
    "incoming_relationships": "http://localhost:7575/db/data/node/3777/relationships/in",
    "incoming_typed_relationships": "http://localhost:7575/db/data/node/3777/relationships/in/{-list|&|types}",
    "create_relationship": "http://localhost:7575/db/data/node/3777/relationships",
    "data": {
        "ModelNumber": "MN1",
        "$type": "ModuleType",
        "Name": "M1"
    }
}

我正在使用http://james.newtonking.com/pages/json-net.aspx来解析JSON,并且为了自动推断对象类型,$ type属性必须是第一个。当您不想首先将整个内容加载到内存中时,在流中解析JSON时有意义。

它似乎不是按字母顺序排列的,它似乎也不是随机的。似乎订单对于不同的对象类型是一致的,但它们之间是不一致的。

我也已经在Shell中删除了节点,所以看起来顺序并不依赖于我如何获取节点,而是与我创建节点的顺序无关。

2 个答案:

答案 0 :(得分:3)

属性没有保证订单。不要对“可能”的订单做任何假设。即将推出的版本可能会改变此假定行为并破坏您的代码。

我想Cypher更简单的做法是不返回节点本身,而是支持一系列属性,例如。

START node=node(<myid>)
RETURN node.`$type`, node.ModelNumber, node.Name

这已经定义了列。

答案 1 :(得分:0)

绝对似乎没有该功能。 我的解决方法是使用aXX_格式的前缀为属性加上别名,如a01_,a02,a03_,然后在代码中将其删除。 不漂亮,也不好,但是它作为neo4j尊重数字顺序的作品。 开头时需要一个字母字符,因此在数字之前是“ a”。