【问题标题】:Neo4jClient and Cypher Query have difference order returned resultsNeo4jClient 和 Cypher Query 有不同的顺序返回结果
【发布时间】:2014-07-11 16:26:39
【问题描述】:

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

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

结果如下: 所以,你看,顺序是:2 3 4 (userID)

这是我用 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();
        }

这是上面代码的结果:

顺序是 3 2 4 (userID) 你看。

能否请您解释一下原因并告诉我如何解决?

感谢您的帮助。

【问题讨论】:

    标签: neo4j cypher neo4jclient


    【解决方案1】:

    嗯,您的查询肯定是不同的;例如,使用 Neo4jclient 的那个有一个collect。它们将遵循不同的执行计划,除非您明确指定,否则它们可以以不同的顺序返回结果。

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

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

    【讨论】:

    • 是的。如果您不指定 ORDER BY,则数据库有权以最快的方式返回数据,这可能会在调用之间不一致,即使查询文本没有更改。
    • @TathamOddie 那么,我怎样才能找回自我网络?因为我认为 Graphity Data Model 的强大之处在于从不使用任何排序算法,例如 ORDER BY?你有什么建议吗?
    • 如果你关心结果的顺序,你需要使用 ORDER BY。如果您不在乎,请不要使用它。真的就这么简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2013-11-18
    • 1970-01-01
    • 2020-07-03
    • 2021-12-20
    相关资源
    最近更新 更多