【问题标题】:Issues after updating gremlin-server更新 gremlin-server 后的问题
【发布时间】:2020-04-03 16:09:34
【问题描述】:

目前我正在使用 janusgraph-0.2.0-hadoop2 服务器并使用 gremlin@2.6.0 库进行查询

const Gremlin = require("gremlin");
const client = Gremlin.createClient(8182, "192.168.0.103");

function test(p){
   client.execute(q, {}, (err, results) => {
    if (err) {
      console.error(err);
      client.closeConnection();
    }
    else {
    console.log(results);
    client.closeConnection();
   }
});
}

查询g.V().count(),结果为[ 12 ]

查询g.V().has('name', 'saturn').valueMap(),结果为[ { name: [ 'saturn' ], age: [ 10000 ] } ]

我没问题

但是在将我的 janusgraph 更新到 janusgraph-0.5.0-hadoop2 服务器并使用相同的库 gremlin@2.6.0

获取不同的数据

查询g.V().count(),结果为[ { '@type': 'g:Int64', '@value': 12 } ]

查询g.V().has('name', 'saturn').valueMap()的结果是

[ { '@type': 'g:Map', '@value': [ 'name', [Object], 'age', [Object] ] } ] 将库更新到 gremlin@3.4.6

const gremlin = require('gremlin');
const client = new gremlin.driver.Client('ws://192.168.0.106:8182/gremlin', { traversalSource: 'g' });

async function test(q){
  const res = await client.submit(q, {});
  console.log('res',res)
  client.close();
}

test()

查询g.V().count(),结果为[ 12 ]

查询g.V().has('name', 'saturn').valueMap(),结果为[ Map { 'name' => [ 'saturn' ], 'age' => [ 10000 ] } ]

在Hashmap中获取数据 我想知道

 1. Is it necessary to update gremlin library 3.4.6 getting correct result.
 2. After updating to 3.4.6 get data in hashmap format, Means i want to know i am getting correct data or not.
 3. I want data in object format but got in hashmap. I know i can convert to object but incase data is in nested hashmap, I dont want to repeat and convert it.

请给我建议

【问题讨论】:

    标签: gremlin janusgraph gremlin-server


    【解决方案1】:

    我会说使用当前版本的 Janus Graph 是一个非常好的主意。请注意,您应该使用 Janus 图形附带的 Gremlin 库,而不是单独更新这些库。如您所见,最新的 Javascript/Node Gremlin 客户端确实返回 Map 类型。

    【讨论】:

    • 这是个好建议。请注意,2.6.0 的 javascript gremin 确实很旧,甚至没有发布来自 Apache 项目的工件。直到 3.2.8/3.3.2 当 npm “gremlin” 被提供给 Apache 项目时,你才能得到它。从 2.6.0 升级可能是一个巨大的变化,因为从那时起许多 API 操作和配置选项发生了变化。
    • 从您的版本迁移中,您最直接注意到的是 2.6.0 的旧版本可能绑定到 GraphSON 1,但较新版本中的默认值可能是 3(或者可能是 2)默认。您可能会切换回 1 以获得相同的格式,但这将意味着驱动程序(可能还有服务器)的序列化配置更改。最好阅读有关 gremlin-javascript 的最新文档并利用最新的特性和功能。自从通过Client发送Gremlin的字符串脚本以来,Gremlin的开发机制有了很大的改进。
    • 您可以在我们的参考文档中找到最新信息 - tinkerpop.apache.org/docs/current/reference/#gremlin-javascript
    • 我得到了将它转换为对象的代码。 const mapToObj = (inputMap) => { let obj = {}; inputMap.forEach(function(value, key){ obj[key] = value }); return obj; } **重复映射对象,每次都通过嵌套映射将其转换为对象,每个结果都很难做到这一点。有没有更好的方法或做同样的事情**
    • 我不确定在什么情况下会为您生成嵌入式地图。您只是指从valueMap() 返回的内容。如果您使用的版本支持它,也许使用elementMap()(或project(),否则)。使用 Gremlin,您可以从本质上以任何您想要的形式取回数据 - 您只需使用适当的 Gremlin 步骤根据需要转换您的结果。
    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多