Marko, Thank you very much, I really appreciate it, I will start going through your response here. I have also added the copy/split aggregate functionality into our Gremlin Client. I was not aware of the if then else as well, will extend our client to support this.
Apologise, will explain Scenario One. I have a User Node that has a relationship LINKED_TO_CENTRE I would like to get a query that can give me all Users that do not have a relationship LINKED_TO_CENTRE. I was thinking of the Except/Retain pattern for this, e.g. get all users as aggregate A then get all users linked as aggregate b - then use except/retain or something along these lines. On Another note, is there a way to get unique()._() to preserve all previous pipes and placeholders, the reason is I want to use unique() before doing a table projection. And unique breaks closures? ( I have a separate post on this in the mail list) Marko, if you interested here is how the .NET code looks like that I am currently trying to write to generate a report. Its not yet finished as I need to take into consideration your feedback, but I am sure I will get their eventually. //ToDo Chained 'As' statements are reversed, bug in gremlin plugin with chained as - https://github.com/neo4j/community/issues/114 var resultSet = graphClient .RootNode .Out<Agency>(Hosts.TypeKey, a => a.Key == userIdentifier.AgencyKey) .In<User>(UserBelongsTo.TypeKey, u => u.Username == userIdentifier.Username) .Out<Centre>(UserLinkedToCentre.TypeKey) .As("Centre") .In<User>(UserLinkedToCentre.TypeKey) //.GremlinDistinct() - breaks pipes for table output .As("UserGivenName") .As("UserFamilyName") .In<Referral>(CreatedBy.TypeKey, r => r.Completed == false) .As("ReferralId") .Out<ReferralWhoSection>(ReferralHasWhoSection.TypeKey) .As("ReferralDate") .Out<ReferralParticipant>(HasParticipant.TypeKey) .As("ParticipantName") .In<ReferralWhoSection>(HasParticipant.TypeKey) .In<Referral>(ReferralHasWhoSection.TypeKey) //.GremlinDistinct() - breaks pipes for table output .Table<ReferralByGroup, Centre, User, User, Referral, Referral, ReferralParticipant>( centre => centre.Name, user => user.FamilyName, user => user.GivenName, referral => referral.UniqueId, referral2 => referral2.DateInitiatedUtc, participant => participant.Name ); Thank You Much appreciated -----Original Message----- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Marko Rodriguez Sent: Saturday, 3 December 2011 4:10 AM To: Neo4j user discussions Subject: Re: [Neo4j] Gremlin Query - Help Hi, > Scenario 1: > I would like to get all Nodes that do not have a relationship to another > node. What is the best way to do this Gremlin? > > Root => NodeA => NodeB > Root => NodeC > > Output should be NodeC I don't understand the problem. > Scenario 2: > Root = > User -> Centre > > I would like to get all centres for userA, and then get all users who > are also linked to the same centres of the userA userA.out('hasCentre').in('hasCentre').except([userA]) > Scenario 3: > User => Centre > I would like to get all users that do not have a link to a Centre, and if > this is the case, do a projection that returns a fake centre with property > "Unknown" g.V.ifThenElse{it.out('hasCentre').filter{it == aCentre}.hasNext()}{}{println "${it} has center unknown"} If you have an index of your Users, then its more efficient to hit that index, then iterate through all vertices (g.V). E.g. g.idx(T.v)[[type:'User']].ifThenElse.... > Scenario 4: > > REFERRAL => PERSON > > I would like to combine a query that gets all Referrals that are > linked to a person and project a table result (contains referrals and > person property values (this is easy to do) However, I then want to do a > SPLIT query, that gets referrals without the persons, and then MERGE both > back into the table projection? So table projecton might look like this. > I guess this is done with .table().it{}....cap, but what I am not sure, is > how to do a split and merge in parallel and then get that merge projected > into the same table. I don't quite understand your problem, but here is an example of splitting and merging. g.v(1).out('knows').copySplit(_().out('knows').name, _().out('created').name).fairMerge This will get all the people that v[1] knows and then generate two parallel pipeline. Each friend of v[1] is copied to each of the 2 parallel pipelines. One pipeline will get their friend's names and one will get their created project's names. It will then merge those two parallel pipelines into a single stream. You can do either fairMerge or exhaustMerge depending on the merging algorithm you want. fairMerge is more memory efficient. I need to write more about split/merge in the Gremlin documentation. https://github.com/tinkerpop/gremlin/wiki/Split-Merge-Pattern <-- will work on it :) HTH, Marko. http://markorodriguez.com _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user