我对Neo4j,Neo4jClient和Cypher Query都很陌生。 我正在实现图形数据模型和算法。所以,我在Neo4j图形数据库上有自己的egonetwork。 这是我的Cypher Query我正在尝试检索指定用户的egonetwork。
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)。
你能解释一下为什么并告诉我如何解决?
感谢您的帮助。
答案 0 :(得分:3)
嗯,你的疑问肯定不同;例如,使用Neo4jclient的人有一个collect
。他们将遵循不同的执行计划,除非您明确指定,否则他们可以以不同的顺序返回结果。
使用ORDER BY
指定订单。否则你不能作出任何假设。
我甚至看到查询以不同的顺序返回结果,而字母大小写只有差异(低写大写字母)。