问题描述
我想使用 gremlin 的 javascript 驱动程序从 node.js 后端在 gremlin-server 中创建一个图形。当我添加了两个属性,一个 id 和一个用户名时,id 有效,但不存储用户名。代码如下:
const gremlin = require('gremlin');
const traversal = gremlin.process.AnonymousTraversalSource.traversal;
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const g = traversal().withRemote(new DriverRemoteConnection('ws://localhost:8182/gremlin'));
const { t: { id } } = gremlin.process;
const { cardinality: { single} } = gremlin.process;
async function createuser(userid,username) {
const vertex = await
g.addV('User')
.property(id,userid)
.property(single,'username',username)
.iterate();
return vertex;
}
await createuser(1001,"testuser")
输出是(当我用 g.V(1001).listAll();
搜索节点时)属性总是 undefined
。
[Vertex { id: 1001,label: 'User',properties: undefined }]
gremlin 服务器使用以下命令通过 docker 加载/运行:
docker pull tinkerpop/gremlin-server
docker run -d -p 8182:8182 --name gremlin tinkerpop/gremlin-server
- node.js 中的 gremlin-driver 有一个版本:
"gremlin": "^3.4.10",
我已经尝试过使用和不使用上面的单数基数,添加了更多的属性,但非工作正常。互联网搜索显示了一些带有 .property
步骤的 gremlin-console(groovy) 工作示例,但没有提示 gremlin 和 gremlin-server 的组合 node.js-driver。
解决方法
我想您的代码运行良好并且属性存在。问题是从查询返回的图形元素只是“引用”——这意味着,它们只包含 id 和标签,没有属性。您应该使用 Map
之类的步骤将结果转换为使用 elementMap()
之类的通用容器。您可以在不同地方的文档中找到更多关于此的讨论,但也许从 this 开始,如果您更感兴趣的是为什么会这样以及改变它会涉及哪些挑战,请参阅 {{ 3}}。