Skip to main content

Common Queries

Practical examples for querying P&ID graph data.

Getting Started

All queries are sent as POST requests:

curl -X POST "https://api.example.com/graph/123" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "YOUR_QUERY_HERE"}'

Node Queries

Get All Nodes

{"query": ".pid_graph.nodes"}

Get Physical Components Only

{"query": ".pid_graph.nodes | filter(.node_type == \"pid_component\")"}

Get All Valves

{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"valve\"))"}

Get Specific Valve Types

{"query": ".pid_graph.nodes | filter(.node_classification == \"piping_component.gate_valve\")"}

Get All Instruments

{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"instrument\"))"}

Get All Equipment

{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"equipment\"))"}

Get Pipe Segments (PNSG)

{"query": ".pid_graph.nodes | filter(.node_type == \"piping_network_segment\")"}

Get Pipe Systems (PNS)

{"query": ".pid_graph.nodes | filter(.node_type == \"piping_network_system\")"}

Get Control Loops

{"query": ".pid_graph.nodes | filter(.node_type == \"instrumentation_loop\")"}

Search by Tag

{"query": ".pid_graph.nodes | filter(contains(.tag, \"FV-\"))"}

Get Node Tags Only

{"query": ".pid_graph.nodes | map(.tag)"}

Get Nodes with Specific Fields

{"query": ".pid_graph.nodes | map({tag: .tag, type: .node_type, classification: .node_classification})"}

Edge Queries

Get All Edges

{"query": ".pid_graph.edges"}

Get Physical Connections

{"query": ".pid_graph.edges | filter(.edge_type == \"physically_connected_to\")"}

Get Hierarchy Relationships

{"query": ".pid_graph.edges | filter(.edge_type == \"has_a\")"}

Get PNSG Terminal Points

Start and end points of pipe segments:

{"query": ".pid_graph.edges | filter(.edge_type == \"starts_at\" or .edge_type == \"ends_at\")"}

Get Equipment-Component Relationships

{"query": ".pid_graph.edges | filter(.edge_type == \"physically_has_a\")"}

Get Edges for a Specific Node

{"query": ".pid_graph.edges | filter(.from.tag == \"FV-101\" or .to.tag == \"FV-101\")"}

Get Downstream Connections

{"query": ".pid_graph.edges | filter(.from.tag == \"FV-101\")"}

Get Upstream Connections

{"query": ".pid_graph.edges | filter(.to.tag == \"FV-101\")"}

Metadata Queries

Get Metadata

{"query": ".pid_graph.metadata"}

Get Drawing Name

{"query": ".pid_graph.metadata.drawing_name"}

Combined Queries

Get Valves with Their Connections

First, get valves:

{"query": ".pid_graph.nodes | filter(contains(.node_classification, \"valve\"))"}

Then, for each valve tag, get its connections:

{"query": ".pid_graph.edges | filter(.from.tag == \"FV-101\" or .to.tag == \"FV-101\")"}

Get Components in a Specific Pipe Segment

{"query": ".pid_graph.edges | filter(.edge_type == \"has_a\" and .from.tag == \"2-CW-001\") | map(.to)"}

Count Nodes by Type

Get all nodes and count in your application:

{"query": ".pid_graph.nodes | map(.node_type)"}

Sorting Results

Sort Nodes by Tag

{"query": ".pid_graph.nodes | sort(.tag)"}

Sort and Filter

{"query": ".pid_graph.nodes | filter(.node_type == \"pid_component\") | sort(.tag)"}