[Neo4j] cypher question - subqueries possible?

Peter Neubauer peter.neubauer at neotechnology.com
Tue Nov 29 15:28:07 CET 2011


Very cool Johann.
Mind writing this into a short blog post? Would love to see this code
and some short illustration on this, even for others to learn from it
...

Cheers,

/peter neubauer

GTalk:      neubauer.peter
Skype       peter.neubauer
Phone       +46 704 106975
LinkedIn   http://www.linkedin.com/in/neubauer
Twitter      http://twitter.com/peterneubauer

http://www.neo4j.org              - NOSQL for the Enterprise.
http://startupbootcamp.org/    - Öresund - Innovation happens HERE.



On Tue, Nov 29, 2011 at 1:59 PM, jschweigl <johann.schweigl at gmail.com> wrote:
> Thanks for all the replies. To explain what I am doing: I'm harvesting
> information from the software engineering tool some guys here are using:
> Excel (gawk!). Excel sheets are parsed and converted to graphs,
> incrementally enriched with properties as I digest subsequent sheets so that
> at the end I get a database of everything which I intend to use for export
> into something useful like Enterprise Architect from Sparx.
>
> The queries I write should do some kind of QA, showing inconsistencies
> introduced by typos in the sheets or incorrect parsing of free text in the
> cells. The model excerpt we are looking at is
>
> http://neo4j-community-discussions.438527.n3.nabble.com/file/n3545086/mockups.png
>
> There are some phenomena I do not understand regarding the query syntax and
> the resulting nodes:
>
> - Query 6 lists all mockups with no relations: 27 items, fine
> - Query 7 lists all mockups linked to a scenario but not linked to any
> subprocess: 53
> - Query 8 lists all mockups linked to a subprocess but not linked to any
> scenario: 53. Exactly the same ones
> - Query 9 lists all mockups linked to both at least one subprocess and
> scenario: 53. Again, exactly the same ones
>
> Query 10 and 11 are the same as 9 and 10, but written according to the hints
> from the forum.
> - Query 10 returns no nodes, which I believe is correct, at least according
> to an overview supplied with the Excel sheet and a few random samples
> - Query 11 returns a node with _id and mockupName being <null> - huh? I'm
> using a quickly hacked POJO mapping layer. jo4neo only works up to neo 1.4
> so I came up with my own which does the absolute minimum I needed for the
> job, but as _id is the primary key, I'm pretty sure I don't store such
> nodes. A bug is always possible, but
> - Query 19 lists all mockup nodes and there is no one with <null> in both
> fields.
>
> The math: there are 27 unlinked nodes, queries 7, 8, and 9 retrieve the very
> same 53 nodes which I believe to be linked to both scenarios and
> subprocesses so either the query or the result must be wrong and query 19
> delivers a total of 80 nodes. 27 + 53 = 80.
>
> As I already said I'm not familiar with neo and cypher yet, but I do not see
> the semantic difference between queries 7 and 8 vs. 10 and 11, yet the
> results differ significantly, and this even between 10 and 11.
>
> As an overview, here are the queries and the (shortened) output:
>
>
> 6: Unused mockups
> START mock=node:nodeIndex(_simpleType = 'Mockup') MATCH
> ()-[r?:HAS_MOCKUP]->mock WHERE r IS NULL RETURN distinct mock._id,
> mock.mockupName ORDER BY mock.mockupName
> +--------------------------------------------------------+
> | mock._id                             | mock.mockupName |
> +--------------------------------------------------------+
> | e80cdb81-9283-3279-9ec4-1c27ace2a3fd | K01-05          |
> | 5095c15a-3230-3b5a-aa03-acd45057470b | K01-07-0        |
>  ...
> | 6ba433d8-5989-399a-b463-8a088eafe756 | P2-P04-8-2      |
> | b3209a20-2081-3444-9047-4615bc6b95b3 | RAO-4-2         |
> +--------------------------------------------------------+
> 27 rows, 37 ms
>
> 7: Mockup linked to scenario not used by any subprocess
> START scenario=node:nodeIndex(_simpleType = 'Scenario'),
> sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH
> scenario-[:HAS_MOCKUP]->mock<-[r?:HAS_MOCKUP]-sub WHERE r IS NULL RETURN
> distinct mock._id, mock.mockupName ORDER BY mock.mockupName
> +--------------------------------------------------------+
> | mock._id                             | mock.mockupName |
> +--------------------------------------------------------+
> | 81a05542-99b2-3672-8498-a31770562416 | K00-1-1         |
> | 7bc08fcc-6380-3ba3-810c-b61d85e9d5d4 | K00-2-2         |
>  ...
> | 0adf74e4-b28f-3301-b903-c65697129c24 | P2-P05-2-1      |
> | 4db08241-c9d7-3ac4-a453-6e8b5957efdb | P2-P05-2-2      |
> +--------------------------------------------------------+
> 53 rows, 739 ms
>
> 8: Mockup linked to subprocess not used by any scenario
> START scenario=node:nodeIndex(_simpleType = 'Scenario'),
> sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH
> sub-[:HAS_MOCKUP]->mock<-[r?:HAS_MOCKUP]-scenario WHERE r IS NULL RETURN
> distinct mock._id, mock.mockupName ORDER BY mock.mockupName
> +--------------------------------------------------------+
> | mock._id                             | mock.mockupName |
> +--------------------------------------------------------+
> | 81a05542-99b2-3672-8498-a31770562416 | K00-1-1         |
> | 7bc08fcc-6380-3ba3-810c-b61d85e9d5d4 | K00-2-2         |
>  ...
> | 0adf74e4-b28f-3301-b903-c65697129c24 | P2-P05-2-1      |
> | 4db08241-c9d7-3ac4-a453-6e8b5957efdb | P2-P05-2-2      |
> +--------------------------------------------------------+
> 53 rows, 987 ms
>
> 9: Test: Mockups linked to both scenario and subprocess
> START scenario=node:nodeIndex(_simpleType = 'Scenario'),
> sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH
> sub-[:HAS_MOCKUP]->mock<-[:HAS_MOCKUP]-scenario RETURN distinct mock._id,
> mock.mockupName ORDER BY mock.mockupName
> +--------------------------------------------------------+
> | mock._id                             | mock.mockupName |
> +--------------------------------------------------------+
> | 81a05542-99b2-3672-8498-a31770562416 | K00-1-1         |
> | 7bc08fcc-6380-3ba3-810c-b61d85e9d5d4 | K00-2-2         |
>  ...
> | 0adf74e4-b28f-3301-b903-c65697129c24 | P2-P05-2-1      |
> | 4db08241-c9d7-3ac4-a453-6e8b5957efdb | P2-P05-2-2      |
> +--------------------------------------------------------+
> 53 rows, 430 ms
>
> 10: Test: Mockup linked to scenario not used by any subprocess
> START scenario=node:nodeIndex(_simpleType = 'Scenario'),
> sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH
> scenario-[:HAS_MOCKUP]->mock, subprocess-[r?:HAS_MOCKUP]->mock WHERE r IS
> NULL RETURN distinct mock._id, mock.mockupName ORDER BY mock.mockupName
> +----------------------------+
> | mock._id | mock.mockupName |
> +----------------------------+
> +----------------------------+
> 0 rows, 1997 ms
>
> 11: Test: Mockup linked to subprocess not used by any scenario
> START scenario=node:nodeIndex(_simpleType = 'Scenario'),
> sub=node:nodeIndex(_simpleType = 'Subprocess') MATCH
> scenario-[r?:HAS_MOCKUP]->mock, subprocess-[:HAS_MOCKUP]->mock WHERE r IS
> NULL RETURN distinct mock._id, mock.mockupName ORDER BY mock.mockupName
> +----------------------------+
> | mock._id | mock.mockupName |
> +----------------------------+
> | <null>   | <null>          |
> +----------------------------+
> 1 rows, 1750 ms
>
> 19: All Mockups
> START mock=node:nodeIndex(_simpleType = 'Mockup') RETURN mock.mockupName
> ORDER BY mock.mockupName
> +-----------------+
> | mock.mockupName |
> +-----------------+
> | K00-1-1         |
> | K00-2-2         |
> ...
> | P2-P05-2-2      |
> | RAO-4-2         |
> +-----------------+
> 80 rows, 3 ms
>
> --
> View this message in context: http://neo4j-community-discussions.438527.n3.nabble.com/cypher-question-subqueries-possible-tp3543685p3545086.html
> Sent from the Neo4j Community Discussions mailing list archive at Nabble.com.
> _______________________________________________
> Neo4j mailing list
> User at lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user


More information about the User mailing list