No index: the following will return Top-10:
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() [ { "name" : "Clint Eastwood", "count" : 148 }, { "name" : "Claude Jade", "count" : 142 }, { "name" : "Samuel L. Jackson", "count" : 122 }, { "name" : "Armin Mueller-Stahl", "count" : 112 }, { "name" : "Gérard Depardieu", "count" : 104 }, { "name" : "Marisa Mell", "count" : 104 }, { "name" : "Robert De Niro", "count" : 104 }, { "name" : "Bruce Willis", "count" : 96 }, { "name" : "Jackie Chan", "count" : 94 }, { "name" : "Michael Caine", "count" : 90 } ]
In principle, you can use “sorting” also for variables created using LET. The restriction allows you to restrict TOP 10. Note that the type at the top is "Role" and the label is "ACTS_IN".
It would be more convenient to add a number to the documents and use a sorted index. But this will require updating documents.
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() [object ArangoQueryCursor] arangosh [_system]> while (c.hasNext()) { var d = c.next(); db.imdb_vertices.update(d._key, {COUNT: d.count}); } arangosh [_system]> db.imdb_vertices.ensureSkiplist("COUNT"); arangosh [_system]> x = db._createStatement({query: 'FOR vert in imdb_vertices FILTER vert.COUNT >= 0 SORT vert.COUNT DESC LIMIT 10 RETURN vert'}).execute() [object ArangoQueryCursor]
fceller
source share