代码之家  ›  专栏  ›  技术社区  ›  Thang Pham

Neo4jClient和Cypher Query返回的结果顺序不同

  •  1
  • Thang Pham  · 技术社区  · 11 年前

    我对Neo4j、Neo4jClient和Cypher Query非常熟悉。 我正在实现Graphity数据模型和算法。所以,我在Neo4j图形数据库上有自己的自我网络。 这是我的Cypher Query,我试图检索指定用户的自我网络。

    MATCH(user:User {userID : '1'})-[:ego1*]->(friend)-[:LATEST_ACTIVITY]->(latest_activity)-[:NEXT*]->(next_activity)
    RETURN friend, latest_activity, next_activity
    

    结果如下: enter image description here 所以,你看,顺序是: 2 3 4(用户ID)

    这是我用Neo4jClient转换的代码

    var query = graphClient.Cypher.Match("(user:User {userID : '1'})-[:ego1*]->(friend)-[:LATEST_ACTIVITY]->(latest_activity)-[:NEXT*]->(next_activity)").
                    Return((friend, latest_activity, next_activity) => new
                    {
                        friends = friend.As<User>(),
                        latest_activity = latest_activity.As<Activity>(),
                        next_activities = next_activity.CollectAs<Activity>()
                    }).Results;
            List<User> friendList = new List<User>();
            List<List<Activity>> activities = new List<List<Activity>>();
            List<Activity> activity, tmp;
            foreach (var item in query)
            {
                friendList.Add(item.friends);
                Console.Write("UserID: " + item.friends.userID + ". Activities: ");
                activity = new List<Activity>();
                activity.Add(item.latest_activity);
                Console.Write(item.latest_activity.timestamp);
                foreach (var i in item.next_activities)
                {
                    activity.Add(i.Data);
                    Console.Write(i.Data.timestamp);
                }
                activities.Add(activity);
                Console.WriteLine();
            }
    

    这是上述代码的结果: enter image description here

    订单是 3 2 4(用户ID) 你看。

    你能解释一下原因并告诉我如何修复吗?

    谢谢你的帮助。

    1 回复  |  直到 11 年前
        1
  •  3
  •   Bossie    11 年前

    嗯,你的疑问当然不同;例如,使用Neo4jclient的客户端具有 collect 它们将遵循不同的执行计划,除非您明确指定,否则它们可以以不同的顺序返回结果。

    使用 ORDER BY 以指定顺序。否则你不能做出任何假设。

    我甚至看到当只有大小写(小写字母和大写字母)不同时,查询返回结果的顺序不同。