All nodes/Data/Database
DB Find One
First document matching the filter. Returns an object {doc, found}: doc is the document or null, found says whether one was found.
Type in the graph: db_find_one
Exec
An error output can be enabled to handle failures on their own path.
Ports can be split into separate execution and data handles.
Try it
Minimal working scenario
- Execute + Data
Runs as pasted
When to use it
Reach for this node when exactly one document is expected: a customer card by user_id, an order by
its number, a setting by key. It returns a ready object rather than an array, so nothing downstream
needs a loop or an index. When several documents match and it matters which one you get, use
db_find with a sort and a limit of 1 — there is no sort here.
How it works
The Filter port carries both the trigger and the filter; an object arriving over the edge replaces
the configured filter, an empty trigger keeps it. The Filter and Projection fields are JSON
editors: {{ … }} is not expanded there, so build a dynamic filter with a
template emitting a JSON object as a string, or with
code_javascript returning an object, and feed it to the port.
The output has two fields: doc — the document itself or null — and found, whether it was there.
A missing document is a successful run, not a failure: draw the “no such thing” branch with
if on {{ nodes.<id>.output.found }}.
Common mistakes
- Expecting an error when nothing matches. The node succeeds with
found: false; without a check downstream,nulltravels on and some other node fails later, in an unexpected place. - Reading fields before checking
found. Branch onfoundfirst, then use{{ nodes.<id>.output.doc.<field> }}. - Reading “first” as “newest”. The order is not defined — it is whatever the store returned. For
the freshest document use db_find with
[["created_at", -1]]and a limit of 1. - A filter that matches several documents. You get one of them, and the next run may hand you a different one. Filter on a field that is genuinely unique.
- Mixing the projection. Including (
1) and excluding (0) fields in one projection is rejected. With an including projection_idalways comes back.
Inputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Filterinput | Execute + Dataexecute_data | — | A value arriving here REPLACES the configured value — it does not merge with it, and it must be an object (any other shape fails the node instead of being ignored). To trigger the node while keeping what you configured, wire the port's exec leg (Run) instead, and put {{ }} templates in the field itself. |
Outputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Search resultsoutput | Execute + Dataexecute_data | object |
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
Collectioncollection_id | string | "" | Collection ID |
Filterfilter | object | — | MongoDB-style filter expression. The first matching record is returned. overridden by port: input |
Projectionprojection | object | — | Which fields to return (1 = include, 0 = exclude). Empty = all of them. |
Shared fields
Every node has these three — the platform adds them, not the node author.
expose_error_output— When enabled, show an execution output to connect nodes that run if this step fails.split_ports_in— Show separate execution and data input handles instead of one combined port.split_ports_out— Show separate execution and data output handles instead of one combined port.