I just discovered in the github issues that there seem to be some issue
with fetchplan.
I did find an answer to my side question. Change this:
select *, @this.toJSON('fetchPlan:[*]out_IsChildOf:-1 [*]in_IsChildOf*:-2')
from Person where Name = "Frank"
to:
select *, @this.toJSON('rid,version,fetchPlan:[*]out_IsChildOf:-1
[*]in_IsChildOf*:-2') from Person where Name = "Frank"
On Wednesday, August 19, 2015 at 11:02:03 PM UTC-4, Chris Whalen wrote:
>
> I have been playing around with people graphs and determining ancestors
> and descendants. I've been banging my head trying to figure out how to get
> a set of records and their ancestors/descendants (see here
> <https://groups.google.com/forum/#!topic/orient-database/4ltzMIfg7rk>).
> When I got the ancestors, I was only getting back the record ids. I then
> had to do a separate query to get the records for those rids. I now see
> that was the wrong approach. OrientDB gives us FETCHPLAN to grab the json
> of the record and levels of traversal through the edges.
>
> Here is what I have so far:
>
> *Person* extends V
> Person.Name = String
> Person.Age = Integer
>
> *IsChildOf* extends E
>
> Here is a sample graph I've constructed:
>
>
> <https://lh3.googleusercontent.com/-eYDwxm1ZycQ/VdVAG5JIEmI/AAAAAAAAGB4/vzEYN7c88GE/s1600/familytree.jpg>
>
>
> Now, I want to run a query to get Frank and his ancestral tree, so I've
> tried running:
>
> select *, @this.toJSON('fetchPlan:[*]out_IsChildOf:-1 [*]in_IsChildOf*:-2'
> ) from Person where Name = "Frank"
>
> This gives me the intended output:
>
> {
> "Name": "Frank",
> "Age": 58,
> "out_IsChildOf": [
> {
> "out": "#12:0",
> "in": {
> "Name": "Bob",
> "Age": 80,
> "in_IsChildOf": [
> "#13:6"
> ],
> "out_IsChildOf": [
> {
> "out": "#12:5",
> "in": {
> "Name": "Gladis",
> "Age": 98,
> "in_IsChildOf": [
> "#13:10"
> ]
> }
> }
> ]
> }
> },
> {
> "out": "#12:0",
> "in": {
> "Name": "Jane",
> "Age": 75,
> "in_IsChildOf": [
> "#13:7"
> ]
> }
> }
> ]
> }
>
> Great! Now, let's try and find the ancestral tree of someone a bit deeper,
> let's pick Mary
>
> select *, @this.toJSON('fetchPlan:[*]out_IsChildOf:-1 [*]in_IsChildOf*:-2'
> ) from Person where Name = "Mary"
>
> Uh oh
>
> {
> "Name": "Mary",
> "Age": 24,
> "out_IsChildOf": [
> {
> "out": "#12:4",
> "in": {
> "Name": "Susan",
> "Age": 57,
> "in_IsChildOf": [
> {
> "out": {
> "Name": "Tony",
> "Age": 29,
> "out_IsChildOf": [
> {
> "out": "#12:2",
> "in": {
> "Name": "Frank",
> "Age": 58,
> "out_IsChildOf": [
> {
> "out": "#12:0",
> "in": {
> "Name": "Bob",
> "Age": 80,
> "in_IsChildOf": [
> "#13:6"
> ],
> "out_IsChildOf": [
> {
> "out": "#12:5",
> "in": {
> "Name": "Gladis",
> "Age": 98,
> "in_IsChildOf": [
> "#13:10"
> ]
> }
> }
> ]
> }
> },
> {
> "out": "#12:0",
> "in": {
> "Name": "Jane",
> "Age": 75,
> "in_IsChildOf": [
> "#13:7"
> ]
> }
> }
> ],
> "in_IsChildOf": [
> "#13:0",
> {
> "out": {
> "Name": "Steven",
> "Age": 25,
> "out_IsChildOf": [
> {
> "out": "#12:3",
> "in": "#12:1"
> },
> "#13:3"
> ],
> "in_IsChildOf": [
> {
> "out": {
> "Name": "Dave",
> "Age": 12,
> "out_IsChildOf": [
> "#13:8",
> {
> "out": "#12:7",
> "in": {
> "Name": "Amy",
> "Age": 32,
> "in_IsChildOf": [
> "#13:9"
> ]
> }
> }
> ]
> },
> "in": "#12:3"
> }
> ]
> },
> "in": "#12:0"
> },
> {
> "out": "#12:4",
> "in": "#12:0"
> }
> ]
> }
> },
> "#13:1"
> ]
> },
> "in": "#12:1"
> },
> "#13:2",
> "#13:4"
> ]
> }
> },
> "#13:5"
> ]
> }
>
> What happened? Why is the fetch plan grabbing the in_IsChildOf when I
> thought I explicitly informed it to ignore that path via the '
> [*]in_IsChildOf*:-2. How do you have a fetch plan only follow a single
> relationship type in a single direction, ignoring all other relationships?
>
> Side Question: Why does the fetch plan not return a record rid? How are
> you supposed to resolve circular references without knowing what record
> corresponds with the rid?
>
>
>
>
>
>
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.