I have this test data.
{
"entityCode": "1ae1067d-2590-4f2e-ad74-f888a7ea7193",
"entityName": "Arda",
"childEntities": [
{
"entityCode": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"entityName": "Middle Earth",
"childEntities": [
{
"entityCode": "b81636a3-8e21-4ad9-a299-39eed1936a5d",
"entityName": "Gondor",
"childEntities": []
}]
}]
}
I have two working queries, one to return entity with the ancestors, the 2nd, to return with the descendants.
With the ancestors
g.V()
.has('_affinity', 'geography')
.has('isDeleted', false)
.not(outE('isChildOf').has('hierarchyCollection', 'default'))
.where(inE('isChildOf').has('hierarchyCollection', 'default').has('isDeleted', false))
.emit()
.repeat(inE('isChildOf').has('hierarchyCollection', 'default').has('isDeleted', false)
.dedup().outV().dedup().has('_affinity', 'geography').has('isDeleted', false))
.has('id', 'ab5368aa-7abc-4f31-b980-7042fb1943e8')
.tree()
With the descendants
g.V('ab5368aa-7abc-4f31-b980-7042fb1943e8')
.has('_affinity', 'geography')
.has('isDeleted', false)
.emit()
.repeat(inE('isChildOf').has('hierarchyCollection', 'default').has('isDeleted', false)
.dedup().outV().dedup().has('_affinity', 'geography').has('isDeleted', false))
.tree()
This returns the ancestor
[
{
"1ae1067d-2590-4f2e-ad74-f888a7ea7193": {
"key": {
"id": "1ae1067d-2590-4f2e-ad74-f888a7ea7193",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "1ae1067d-2590-4f2e-ad74-f888a7ea7193|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "266fb8c3-588f-4ac6-93bf-912cb965349a",
"value": false
}
],
"entityCode": [
{
"id": "e57d00fb-dba6-4792-9763-fbfa2b75788b",
"value": "1ae1067d-2590-4f2e-ad74-f888a7ea7193"
}
]
}
},
"value": {
"cf5e5c4f-3a54-48dd-8d3d-aebec1b7b406": {
"key": {
"id": "cf5e5c4f-3a54-48dd-8d3d-aebec1b7b406",
"label": "isChildOf",
"type": "edge",
"inVLabel": "geography",
"outVLabel": "geography",
"inV": "1ae1067d-2590-4f2e-ad74-f888a7ea7193",
"outV": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"properties": {
"hierarchyCollection": "default",
"isDeleted": false
}
},
"value": {
"ab5368aa-7abc-4f31-b980-7042fb1943e8": {
"key": {
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "196b8bbd-1c1e-4f58-8ab9-9a2b858550f7",
"value": false
}
],
"entityCode": [
{
"id": "1b7e64a6-0b73-40ce-8679-e33b9d0e1fa3",
"value": "ab5368aa-7abc-4f31-b980-7042fb1943e8"
}
]
}
},
"value": {}
}
}
}
}
}
}
]
as well as the descendant
[
{
"ab5368aa-7abc-4f31-b980-7042fb1943e8": {
"key": {
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "196b8bbd-1c1e-4f58-8ab9-9a2b858550f7",
"value": false
}
],
"entityCode": [
{
"id": "1b7e64a6-0b73-40ce-8679-e33b9d0e1fa3",
"value": "ab5368aa-7abc-4f31-b980-7042fb1943e8"
}
]
}
},
"value": {
"e21c09e1-5308-41cd-bf33-ec0f7e1931dc": {
"key": {
"id": "e21c09e1-5308-41cd-bf33-ec0f7e1931dc",
"label": "isChildOf",
"type": "edge",
"inVLabel": "geography",
"outVLabel": "geography",
"inV": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"outV": "b81636a3-8e21-4ad9-a299-39eed1936a5d",
"properties": {
"hierarchyCollection": "default",
"isDeleted": false
}
},
"value": {
"b81636a3-8e21-4ad9-a299-39eed1936a5d": {
"key": {
"id": "b81636a3-8e21-4ad9-a299-39eed1936a5d",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "b81636a3-8e21-4ad9-a299-39eed1936a5d|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "e5560c3d-aca6-455a-8184-09f102b7a532",
"value": false
}
],
"entityCode": [
{
"id": "dcec8e42-afad-4cef-8362-614f2591dfe1",
"value": "b81636a3-8e21-4ad9-a299-39eed1936a5d"
}
]
}
},
"value": {}
}
}
}
}
}
}
]
What I need now is not the entire entities, but the three entityCodes
only (or, two and two, but one is the same one).
I have tried the following statements:
.select('entityCode')
,.select('id')
.unfold()
.cap('entityCode')
.path().by('entityCode')
but the result is always wrong. Either it is all the Guids in the database, or an empty array, or different kind of exceptions. I am not familiar with the gremlin syntax, so unsure what to try more. Please advise.
I have this test data.
{
"entityCode": "1ae1067d-2590-4f2e-ad74-f888a7ea7193",
"entityName": "Arda",
"childEntities": [
{
"entityCode": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"entityName": "Middle Earth",
"childEntities": [
{
"entityCode": "b81636a3-8e21-4ad9-a299-39eed1936a5d",
"entityName": "Gondor",
"childEntities": []
}]
}]
}
I have two working queries, one to return entity with the ancestors, the 2nd, to return with the descendants.
With the ancestors
g.V()
.has('_affinity', 'geography')
.has('isDeleted', false)
.not(outE('isChildOf').has('hierarchyCollection', 'default'))
.where(inE('isChildOf').has('hierarchyCollection', 'default').has('isDeleted', false))
.emit()
.repeat(inE('isChildOf').has('hierarchyCollection', 'default').has('isDeleted', false)
.dedup().outV().dedup().has('_affinity', 'geography').has('isDeleted', false))
.has('id', 'ab5368aa-7abc-4f31-b980-7042fb1943e8')
.tree()
With the descendants
g.V('ab5368aa-7abc-4f31-b980-7042fb1943e8')
.has('_affinity', 'geography')
.has('isDeleted', false)
.emit()
.repeat(inE('isChildOf').has('hierarchyCollection', 'default').has('isDeleted', false)
.dedup().outV().dedup().has('_affinity', 'geography').has('isDeleted', false))
.tree()
This returns the ancestor
[
{
"1ae1067d-2590-4f2e-ad74-f888a7ea7193": {
"key": {
"id": "1ae1067d-2590-4f2e-ad74-f888a7ea7193",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "1ae1067d-2590-4f2e-ad74-f888a7ea7193|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "266fb8c3-588f-4ac6-93bf-912cb965349a",
"value": false
}
],
"entityCode": [
{
"id": "e57d00fb-dba6-4792-9763-fbfa2b75788b",
"value": "1ae1067d-2590-4f2e-ad74-f888a7ea7193"
}
]
}
},
"value": {
"cf5e5c4f-3a54-48dd-8d3d-aebec1b7b406": {
"key": {
"id": "cf5e5c4f-3a54-48dd-8d3d-aebec1b7b406",
"label": "isChildOf",
"type": "edge",
"inVLabel": "geography",
"outVLabel": "geography",
"inV": "1ae1067d-2590-4f2e-ad74-f888a7ea7193",
"outV": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"properties": {
"hierarchyCollection": "default",
"isDeleted": false
}
},
"value": {
"ab5368aa-7abc-4f31-b980-7042fb1943e8": {
"key": {
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "196b8bbd-1c1e-4f58-8ab9-9a2b858550f7",
"value": false
}
],
"entityCode": [
{
"id": "1b7e64a6-0b73-40ce-8679-e33b9d0e1fa3",
"value": "ab5368aa-7abc-4f31-b980-7042fb1943e8"
}
]
}
},
"value": {}
}
}
}
}
}
}
]
as well as the descendant
[
{
"ab5368aa-7abc-4f31-b980-7042fb1943e8": {
"key": {
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "ab5368aa-7abc-4f31-b980-7042fb1943e8|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "196b8bbd-1c1e-4f58-8ab9-9a2b858550f7",
"value": false
}
],
"entityCode": [
{
"id": "1b7e64a6-0b73-40ce-8679-e33b9d0e1fa3",
"value": "ab5368aa-7abc-4f31-b980-7042fb1943e8"
}
]
}
},
"value": {
"e21c09e1-5308-41cd-bf33-ec0f7e1931dc": {
"key": {
"id": "e21c09e1-5308-41cd-bf33-ec0f7e1931dc",
"label": "isChildOf",
"type": "edge",
"inVLabel": "geography",
"outVLabel": "geography",
"inV": "ab5368aa-7abc-4f31-b980-7042fb1943e8",
"outV": "b81636a3-8e21-4ad9-a299-39eed1936a5d",
"properties": {
"hierarchyCollection": "default",
"isDeleted": false
}
},
"value": {
"b81636a3-8e21-4ad9-a299-39eed1936a5d": {
"key": {
"id": "b81636a3-8e21-4ad9-a299-39eed1936a5d",
"label": "geography",
"type": "vertex",
"properties": {
"_affinity": [
{
"id": "b81636a3-8e21-4ad9-a299-39eed1936a5d|_affinity",
"value": "geography"
}
],
"isDeleted": [
{
"id": "e5560c3d-aca6-455a-8184-09f102b7a532",
"value": false
}
],
"entityCode": [
{
"id": "dcec8e42-afad-4cef-8362-614f2591dfe1",
"value": "b81636a3-8e21-4ad9-a299-39eed1936a5d"
}
]
}
},
"value": {}
}
}
}
}
}
}
]
What I need now is not the entire entities, but the three entityCodes
only (or, two and two, but one is the same one).
I have tried the following statements:
.select('entityCode')
,.select('id')
.unfold()
.cap('entityCode')
.path().by('entityCode')
but the result is always wrong. Either it is all the Guids in the database, or an empty array, or different kind of exceptions. I am not familiar with the gremlin syntax, so unsure what to try more. Please advise.
Share Improve this question edited Mar 24 at 12:28 Emilija Vilija Trečiokaitė asked Mar 24 at 12:18 Emilija Vilija TrečiokaitėEmilija Vilija Trečiokaitė 9515 silver badges8 bronze badges2 Answers
Reset to default 1Are you trying to produce the same as your current queries, except to only include the entityCode
instead of the complete vertices?
If so, I believe the solution you're looking for is tree().by('entityCode')
. There are some relevant examples in the reference docs for the tree step: https://tinkerpop.apache./docs/3.7.3/reference/#tree-step
I dropped the idea of using the existing query and started from scratch. These two worked:
For the descendants
var query = $"g.V('ab5368aa-7abc-4f31-b980-7042fb1943e8')" +
$".has('_affinity', 'geography')" +
$".inE('isChildOf')" +
$".has('hierarchyCollection', 'default')" +
$".has('isDeleted', false)" +
$".outV()" +
$".emit()" +
$".repeat(inE('isChildOf').has('_affinity', 'geography').has('isDeleted', false).has('hierarchyCollection', 'default').outV())" +
$".values('entityCode')";
And for the ancestors
var query = $"g.V('ab5368aa-7abc-4f31-b980-7042fb1943e8')" +
$".has('_affinity', 'geography')" +
$".outE('isChildOf')" +
$".has('hierarchyCollection', 'default')" +
$".has('isDeleted', false)" +
$".inV()" +
$".has('_affinity', 'geography')" +
$".has('isDeleted', false)" +
$".emit()" +
$".repeat(outE('isChildOf').has('hierarchyCollection', 'default').has('isDeleted', false).inV().has('_affinity', 'geography').has('isDeleted', false))" +
$".values('entityCode')";