我正在尝试通过CosmosDB client library查询TinkerPop服务器(托管在docker容器中),该服务器使用了Gremlin.Net。所以我设法将其连接并插入数据,这是截获的WebSocket请求:
!application/vnd.gremlin-v1.0+json{
"requestId": "b64bd2eb-46c3-4095-9eef-768bca2a14ed",
"op": "eval",
"processor": "",
"args": {
"gremlin": "g.addV(\"User\").property(\"UserId\",2).property(\"CustomerId\",1)"
}
}
响应:
{
"requestId": "b64bd2eb-46c3-4095-9eef-768bca2a14ed",
"status": {
"message": "",
"code": 200,
"attributes": {
"host": "/172.19.0.1:38848"
}
},
"result": {
"data": [
{
"id": 0,
"label": "User",
"type": "vertex",
"properties": {}
}
],
"meta": {}
}
}
问题是我通过gremlin控制台连接时看到了那些属性
gremlin> g.V().hasLabel("User").has("CustomerId",1).has("UserId",2).limit(1).valueMap()
==>{UserId=[2], CustomerId=[1]}
此外,我还可以使用Gremlin.Net查询TinkerPop服务器:
!application/vnd.gremlin-v1.0+json{
"requestId": "de35909f-4bc1-4aae-aa5f-28361b3c0933",
"op": "eval",
"processor": "",
"args": {
"gremlin": "g.V().hasLabel(\"User\").has(\"CustomerId\",1).has(\"UserId\",2).limit(1)"
}
}
但是它会返回具有零值ID且不包含任何属性的有效载荷:
{
"requestId": "de35909f-4bc1-4aae-aa5f-28361b3c0933",
"status": {
"message": "",
"code": 200,
"attributes": {
"host": "/172.19.0.1:38858"
}
},
"result": {
"data": [
{
"id": 0,
"label": "User",
"type": "vertex",
"properties": {}
}
],
"meta": {}
}
}
尝试在GraphSON v1,v2,v3之间交换,但没有运气。文档说脚本序列化程序应该包括所有属性。我必须以某种方式调整配置以使其正常工作并返回属性吗?
答案 0 :(得分:2)
因此,似乎使用3.4版本的Gremlin服务器ReferenceElementStrategy
默认情况下,遍历中添加了,以保持二进制和脚本序列化程序之间的兼容性。在我们的案例中,我们想模仿CosmosDB的行为,因此要调整和接收所需的行为,只需从init脚本中删除策略(在我们的案例中为empty-sample.groovy
globals << [g : graph.traversal().withStrategies(ReferenceElementStrategy.instance())]
到
globals << [g : graph.traversal()]