Filter OUT nodes with edges

Hey,

For this query i think it best i explain by way of example, and then perhaps I can modify the title/desc based on feedback…

Data:

{
  set {  
    _:a1 <customer> "10040" .
    _:e1 <email> "30040@gmail.com" .
    _:u1 <browser> "20040" .
    
    _:o1 <usercode> "usercode_f" .
    _:o2 <usercode> "usercode_g" .
    _:o3 <usercode> "usercode_h" .
    _:o4 <usercode> "usercode_i" .
    
    _:o1 <authenticate_as> _:a1 .
    _:o1 <browsed_on> _:u1 .
    _:a1 <subscribes_as> _:e1 .

    _:o2 <referred_with> _:e1 .
    _:o2 <browsed_on> _:u1 .
    
    _:o3 <browsed_on> _:u1 .
    _:o4 <browsed_on> _:u1 .
  }
}

WIP Query:

{
    userocode_by_browser (func:eq(browser, "20040"))  {
    name:browser
    ~browsed_on   {
      name:usercode
        authenticate_as {
          name:customer
        }
        referred_with {
          name:email
        }
      }
  }
}

Result:Screenshot 2020-10-26 at 11.21.45

Desired Result:
Omit usercode_f and usercode_g because they have outgoing edges. I only want h and i (as they have no outgoing edges)

Thanks

Hi @damienburke,

You may use some query like this,

{
    userocode_by_browser (func:has(browser))  {
    name:browser
    ~browsed_on @filter(NOT(has(referred_with) OR has(authenticate_as)))  {
      name:usercode
      // anything else you want to print
      }
  }
}

The query makes use of Connecting Filters. You may read more about it here.

1 Like

awesome, thanks @rajas