Neo4j Astrological Insights

Run advanced astrological queries against your graph database

Back to Home

Cypher Query Editor

Query results will appear here

Example Astrological Queries

Find all planets in fire signs
MATCH (p:Planet)-[:IN_SIGN]->(s:Sign)
WHERE s.element = 'Fire'
RETURN p.name AS Planet, s.name AS Sign
Find charts with stelliums (3+ planets in same sign)
MATCH (c:Chart)-[:HAS_PLANET]->(p:Planet)-[:IN_SIGN]->(s:Sign)
WITH c, s, COUNT(p) AS planet_count
WHERE planet_count >= 3
RETURN c.name AS Chart, s.name AS Sign, planet_count AS Number_of_Planets
ORDER BY planet_count DESC
Find most common planet-sign placements
MATCH (p:Planet)-[:IN_SIGN]->(s:Sign)
WITH p.name AS planet, s.name AS sign, COUNT(*) AS frequency
RETURN planet, sign, frequency
ORDER BY frequency DESC
LIMIT 10

Find the most frequent aspects
MATCH (c:Chart)-[:HAS_ASPECT]->(a:Aspect)
WITH a.aspect_type AS aspect_type, a.planet1_name AS planet1, a.planet2_name AS planet2, COUNT(*) AS frequency
RETURN aspect_type, planet1, planet2, frequency
ORDER BY frequency DESC
LIMIT 10
Find charts with a grand trine (3 planets in trine)
MATCH (c:Chart)-[:HAS_PLANET]->(p1:Planet)-[:IN_SIGN]->(s1:Sign),
      (c)-[:HAS_PLANET]->(p2:Planet)-[:IN_SIGN]->(s2:Sign),
      (c)-[:HAS_PLANET]->(p3:Planet)-[:IN_SIGN]->(s3:Sign)
WHERE p1.name < p2.name AND p2.name < p3.name
AND s1.element = s2.element AND s2.element = s3.element
RETURN c.name AS Chart, p1.name AS Planet1, p2.name AS Planet2, p3.name AS Planet3, s1.element AS Element
Find tight conjunctions (less than 3°)
MATCH (c:Chart)-[:HAS_ASPECT]->(a:Aspect)
WHERE a.aspect_type = 'conjunction' AND a.orb < 3
RETURN c.name AS Chart, a.planet1_name AS Planet1, a.planet2_name AS Planet2, a.orb AS Orb
ORDER BY a.orb

Find charts with no planets in an element
MATCH (c:Chart)
OPTIONAL MATCH (c)-[:HAS_PLANET]->(p:Planet)-[:IN_SIGN]->(s:Sign)
WHERE s.element = 'Fire'
WITH c, COUNT(p) AS fire_planets
WHERE fire_planets = 0
RETURN c.name AS Chart, fire_planets AS Fire_Planets
Find houses containing multiple planets
MATCH (c:Chart)-[:HAS_HOUSE]->(h:House)<-[:IN_HOUSE]-(p:Planet)
WITH c, h, COLLECT(p.name) AS planets, COUNT(p) AS planet_count
WHERE planet_count > 1
RETURN c.name AS Chart, h.house_number AS House, planets, planet_count
ORDER BY planet_count DESC
Find mutual reception patterns
MATCH (c:Chart)-[:HAS_PLANET]->(p1:Planet)-[:IN_SIGN]->(s1:Sign),
      (c)-[:HAS_PLANET]->(p2:Planet)-[:IN_SIGN]->(s2:Sign)
WHERE p1.name <> p2.name
AND p1.name IN ['Sun', 'Moon', 'Mercury', 'Venus', 'Mars', 'Jupiter', 'Saturn'] 
AND p2.name IN ['Sun', 'Moon', 'Mercury', 'Venus', 'Mars', 'Jupiter', 'Saturn']
AND ((p1.name = 'Sun' AND s2.name = 'Leo') OR
     (p1.name = 'Moon' AND s2.name = 'Cancer') OR
     (p1.name = 'Mercury' AND (s2.name = 'Gemini' OR s2.name = 'Virgo')) OR
     (p1.name = 'Venus' AND (s2.name = 'Taurus' OR s2.name = 'Libra')) OR
     (p1.name = 'Mars' AND (s2.name = 'Aries' OR s2.name = 'Scorpio')) OR
     (p1.name = 'Jupiter' AND (s2.name = 'Sagittarius' OR s2.name = 'Pisces')) OR
     (p1.name = 'Saturn' AND (s2.name = 'Capricorn' OR s2.name = 'Aquarius')))
AND ((p2.name = 'Sun' AND s1.name = 'Leo') OR
     (p2.name = 'Moon' AND s1.name = 'Cancer') OR
     (p2.name = 'Mercury' AND (s1.name = 'Gemini' OR s1.name = 'Virgo')) OR
     (p2.name = 'Venus' AND (s1.name = 'Taurus' OR s1.name = 'Libra')) OR
     (p2.name = 'Mars' AND (s1.name = 'Aries' OR s1.name = 'Scorpio')) OR
     (p2.name = 'Jupiter' AND (s1.name = 'Sagittarius' OR s1.name = 'Pisces')) OR
     (p2.name = 'Saturn' AND (s1.name = 'Capricorn' OR s1.name = 'Aquarius')))
RETURN c.name AS Chart, p1.name AS Planet1, s1.name AS Planet1_Sign, p2.name AS Planet2, s2.name AS Planet2_Sign