Gremlin JS 3.4.0中的.project()。by()问题

时间:2019-01-16 22:13:02

标签: gremlin amazon-neptune

我看到在Gremlin JS .project().by()下,{}遍历返回了3.4.0。当我降级为3.2.10时,它们可以正常工作。

gremlin> g.addV("trip").property(single, "trackName", "Ohio")

==>v[1]

In Gremlin JS `3.4.0`:

const result = await g.V("1").project("trackName").by("trackName").next();

结果:

{
  "value": {},
  "done": false
}

但是当我降级为Gremlin 3.2.10时,结果是正确的:

{
  "value": {
    "trackName": "Ohio"
  },
  "done": false
}

我需要更改在project中使用3.4.0的方式吗?

编辑:针对不同版本进行测试的结果。我为gremlin版本运行了每个测试,捕获了结果,然后提高了版本并再次运行了测试。我只运行一个Neptune实例,所以我们可以确保这是相同的数据。

enter image description here

测试失败意味着它以以下形式返回数据:

"results": {
 "value": {},
 "done": false
}

对于控制台测试,我删除了最后的.next()

我正在测试的环境是:

AWS Lambda节点8.10

AWS Neptune 1.0.1.0

编辑2:添加海王星测试中使用的JS文件。

index.js

const gremlin = require("gremlin");

const { DriverRemoteConnection } = gremlin.driver;
const { Graph } = gremlin.structure;

const initGremlinClient = () => {
  try {
    const dc = new DriverRemoteConnection(
      `ws://my-cluster.XXXXXXX.us-east-1.neptune.amazonaws.com:8182/gremlin`,
      {}
    );
    const graph = new Graph();
    return {
      g: graph.traversal().withRemote(dc),
      closeGremlinConnection: () => dc.close()
    };
  } catch (error) {
    console.log("[GREMLIN INIT ERROR]", error);
    throw new Error(error);
  }
};

exports.handler = async event => {
  const { g, closeGremlinConnection } = initGremlinClient();

  const result = await g
    .addV("test")
    .property("myProp", "myValue")
    .project("myProp")
    .by("myProp")
    .next();
  closeGremlinConnection();
  return result;
};

package.json

{
  "name": "gremlinTest",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "gremlin": "3.4.0"
  }
}

1 个答案:

答案 0 :(得分:0)

我与AWS团队的某人交谈。有一个错误会影响Gremlin ^3.3.5和Lambda之间的互操作性。具体来说,问题出在底层的GraphSON v3引擎以及Lambda如何解析JSON。

临时解决方法是在实例化DriverRemoteConnection时回退到GraphSON v2:

const dc = new DriverRemoteConnection(
  `ws://my-neptune-cluster.us-east-1.neptune.amazonaws.com:8182/gremlin`,
  { mimeType: "application/vnd.gremlin-v2.0+json" } // Fall back to GraphSON v2
);