Gremlin JS 3.4.0中的.project().by()存在问题
我在gremlinjsGremlin JS 3.4.0中的.project().by()存在问题,gremlin,amazon-neptune,Gremlin,Amazon Neptune,我在gremlinjs3.4.0下看到.project().by()遍历返回{}。当我降级到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(); 结果: { "va
3.4.0
下看到.project().by()
遍历返回{}
。当我降级到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
}
但当我降级到Gremlin3.2.10
时,结果是正确的:
{
"value": {
"trackName": "Ohio"
},
"done": false
}
我是否需要更改在3.4.0
中使用project
的方式
编辑:根据不同版本测试的结果。我为一个gremlin版本运行每个测试,捕获结果,然后升级版本并再次运行测试。我只运行一个海王星实例,所以我们可以确定这是相同的数据
测试失败意味着它以以下形式返回数据:
"results": {
"value": {},
"done": false
}
对于控制台测试,我删除了最后的.next()
我正在测试的环境是:
AWS Lambda节点8.10
AWS海王星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"
}
}
我和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
);
编辑:此问题在
gremlin@3.4.6
在您的示例中,您创建了一个名为“trackName”的属性,但搜索了一个名为“trackLength”的属性,如果“trackLength”不存在,我想这会导致一个空结果。哎呀,这是示例中的一个输入错误。我会纠正这个问题,但问题仍然存在。我已经在几个顶点和属性上复制了它。谢谢你的接听。正如我在一个与3.4.0使用有关的问题中所建议的那样,我会考虑使用3.3.5与海王星至少直到他们宣布官方支持3.4.0。虽然3.4.0通常应该与3.3.x配合使用,但在大的方面(比如错误地使用仅在3.4.0中可用的步骤)和细微的方面(可能像您现在所经历的那样),都可能会给您带来麻烦。如果您尝试3.3.5,但仍然有一个问题,这在我的脑海中会是更意想不到的。请告诉我们您是否尝试过该版本并最终遇到了相同的问题。@stephenmallette 3.3.5.3.2.11中似乎存在相同的问题,这是没有此问题的最新版本。我已经用3.3.5和3.4.0进行了测试。