3

有没有控制属性顺序的机制?

我无法在http://www.neo4j.org/console中重现此内容

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

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

然后稍后我使用我返回的 REST 密码端点从密码查询中取回这个节点......

{
    "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 中,因此似乎顺序不取决于我如何获取节点,但也与我创建节点的顺序无关。

4

2 回答 2

3

属性没有保证的顺序。不要对“可能”的顺序做任何假设。即将发布的版本可能会改变这种假设行为并破坏您的代码。

我想在 Cypher 中不返回节点本身以支持属性列表更简单,例如

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

这已经定义了列。

于 2013-08-20T11:46:15.593 回答
1

明确地说,它似乎没有那个功能。我的解决方法是使用 aXX_ 格式的前缀对属性进行别名,如 a01_、a02、a03_,然后在代码中将其删除。不漂亮,不是很好,但它的工作原理是 neo4j 尊重数字顺序。它需要一个字母字符在开头,因此在数字前有“a”。

于 2019-06-05T14:14:28.153 回答