如何按入局边数计数和排序

mik*_*son 8 graph arangodb

我正试图让十个主演过最多电影的人得到降序的电影名称和电影数量.我正在使用IMDB数据集.

这是我到目前为止:

arangosh [_system]>   var Graph = require("org/arangodb/graph").Graph;
arangosh [_system]>   var db = require("org/arangodb").db;
arangosh [_system]> statement = db._createStatement({query: 'FOR vert IN imdb_vertices FILTER vert.type == "Person" LET edge_count = (LENGTH(EDGES(imdb_edges, vert, "outbound", [{type: "ACTS_IN"}]))) RETURN {"name": vert.name,  "count": edge_count}'})
[object ArangoStatement]

arangosh [_system]> cursor = statement.execute()
[object ArangoQueryCursor]

arangosh [_system]> cursor.next()
{ 
  "name" : "Stephanie Faracy", 
  "count" : 0 
}
Run Code Online (Sandbox Code Playgroud)

我怎么能用AQL做到这一点?

fce*_*ler 4

没有索引:以下将返回前 10 名:

\n\n
arangosh [_system]> db._createStatement({query: \'FOR vert IN imdb_vertices FILTER vert.type == "Person" LET edge_count = (LENGTH(EDGES(imdb_edges, vert, "outbound", [{"type": "Role", "$label": "ACTS_IN"}]))) SORT edge_count DESC LIMIT 10 RETURN {"name": vert.name,  "count": edge_count}\'}).execute().toArray()\n[ \n  { \n    "name" : "Clint Eastwood", \n    "count" : 148 \n  }, \n  { \n    "name" : "Claude Jade", \n    "count" : 142 \n  }, \n  { \n    "name" : "Samuel L. Jackson", \n    "count" : 122 \n  }, \n  { \n    "name" : "Armin Mueller-Stahl", \n    "count" : 112 \n  }, \n  { \n    "name" : "G\xc3\xa9rard Depardieu", \n    "count" : 104 \n  }, \n  { \n    "name" : "Marisa Mell", \n    "count" : 104 \n  }, \n  { \n    "name" : "Robert De Niro", \n    "count" : 104 \n  }, \n  { \n    "name" : "Bruce Willis", \n    "count" : 96 \n  }, \n  { \n    "name" : "Jackie Chan", \n    "count" : 94 \n  }, \n  { \n    "name" : "Michael Caine", \n    "count" : 90 \n  } \n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

基本上,您也可以对使用 LET 创建的变量使用“排序”。Limit 允许您限制为 TOP 10。请注意,顶点中的类型是“Role”,标签是“ACTS_IN”。

\n\n

将数字添加到文档并使用排序索引会更有效。但这需要更新文件。

\n\n
arangosh [_system]> c = db._createStatement({query: \'FOR vert IN imdb_vertices FILTER vert.type == "Person" LET edge_count = (LENGTH(EDGES(imdb_edges, vert, "outbound", [{"type": "Role", "$label": "ACTS_IN"}]))) RETURN {"_key": vert._key,  "count": edge_count}\'}).execute()\n[object ArangoQueryCursor]\n\narangosh [_system]> while (c.hasNext()) { var d = c.next(); db.imdb_vertices.update(d._key, {COUNT: d.count}); }\n\narangosh [_system]> db.imdb_vertices.ensureSkiplist("COUNT");\n\narangosh [_system]> x = db._createStatement({query: \'FOR vert in imdb_vertices FILTER vert.COUNT >= 0 SORT vert.COUNT DESC LIMIT 10 RETURN vert\'}).execute()\n[object ArangoQueryCursor]\n
Run Code Online (Sandbox Code Playgroud)\n