【问题标题】:TypeError: Object #<ShapedJson> has no method 'indexOf'类型错误:对象 #<ShapedJson> 没有方法 'indexOf'
【发布时间】:2014-05-05 19:00:47
【问题描述】:

我正在尝试对来自this answer 的查询进行变体。我希望对顶点进行进一步过滤,以便自定义前十名(使其成为给定年份或类似情况下角色最多的前十名演员)。

如果我尝试使用 NEIGHBORS 函数,我会收到以下错误:

arangosh [_system]> db._createStatement({query: 'FOR vert IN imdb_vertices FILTER vert.type == "Person" LET edge_count = (LENGTH(NEIGHBORS(imdb_vertices, imdb_edges, vert, "outbound", [{"type": "Role", "$label": "ACTS_IN"}]))) SORT edge_count DESC LIMIT 10 RETURN {"name": vert.name,  "count": edge_count}'}).execute().toArray()
JavaScript exception in file '/usr/share/arangodb/js/client/modules/org/arangodb/arangosh.js' at 101,13: TypeError: TypeError: Object #<ShapedJson> has no method 'indexOf'
!      throw new TypeError(requestResult.errorMessage);
!            ^
stacktrace: TypeError: TypeError: Object #<ShapedJson> has no method 'indexOf'
    at Object.exports.checkRequestResult (/usr/share/arangodb/js/client/modules/org/arangodb/arangosh.js:101:13)
    at ArangoStatement.execute (/usr/share/arangodb/js/client/modules/org/arangodb/arango-statement.js:171:12)
    at (shell):1:290

由于 NEIGHBORS 似乎同时返回边和顶点(与返回边的 EDGES 不同),我认为问题可能是这样,所以我尝试使用 paths: false 选项使用 TRAVERSAL。 不幸的是,它给出了同样的错误:

db._createStatement({query: 'FOR vert IN imdb_vertices FILTER vert.type == "Person" LET edge_count = (LENGTH(TRAVERSAL(imdb_vertices,imdb_edges, vert, "outbound", {paths: false, followEdges: [{"type": "Role", "$label": "ACTS_IN"}]}))) SORT edge_count DESC LIMIT 10 RETURN {"name": vert.name,  "count": edge_count}'}).execute().toArray()
JavaScript exception in file '/usr/share/arangodb/js/client/modules/org/arangodb/arangosh.js' at 101,13: TypeError: TypeError: Object #<ShapedJson> has no method 'indexOf'
!      throw new TypeError(requestResult.errorMessage);
!            ^
stacktrace: TypeError: TypeError: Object #<ShapedJson> has no method 'indexOf'
    at Object.exports.checkRequestResult (/usr/share/arangodb/js/client/modules/org/arangodb/arangosh.js:101:13)
    at ArangoStatement.execute (/usr/share/arangodb/js/client/modules/org/arangodb/arango-statement.js:171:12)
    at (shell):1:318

谁能解释我为什么会收到这个错误?

【问题讨论】:

    标签: graph arangodb


    【解决方案1】:

    我认为问题在于上述查询中的vert是一个顶点对象,但它应该是一个顶点_id(或顶点_key)。这就是发生异常的原因。

    第一个查询可以修改如下:

    db._createStatement({query: 'FOR vert IN imdb_vertices FILTER vert.type == "Person" LET edge_count = (LENGTH(NEIGHBORS(imdb_vertices, imdb_edges, vert._id, "outbound", [{"type": "Role", "$label": "ACTS_IN"}]))) SORT edge_count DESC LIMIT 10 RETURN {"name": vert.name,  "count": edge_count}'}).execute().toArray()
    

    【讨论】:

    • 不错!它有效,但我想了解原因。你能解释一下为什么我需要将 vert._id 传递给 NEIGHBORS 和 TRAVERSAL 但不知何故 EDGES 只需要 vert 就可以了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多