是否有控制属性顺序的机制?
我无法在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中删除了节点,所以看起来顺序并不依赖于我如何获取节点,而是与我创建节点的顺序无关。
答案 0 :(得分:3)
属性没有保证订单。不要对“可能”的订单做任何假设。即将推出的版本可能会改变此假定行为并破坏您的代码。
我想Cypher更简单的做法是不返回节点本身,而是支持一系列属性,例如。
START node=node(<myid>)
RETURN node.`$type`, node.ModelNumber, node.Name
这已经定义了列。
答案 1 :(得分:0)
绝对似乎没有该功能。 我的解决方法是使用aXX_格式的前缀为属性加上别名,如a01_,a02,a03_,然后在代码中将其删除。 不漂亮,也不好,但是它作为neo4j尊重数字顺序的作品。 开头时需要一个字母字符,因此在数字之前是“ a”。