Skip to content

Table — list rows ​

Returns an array of filtered, sorted rows — ready to feed a loop.

Reads the rows of a Table that match your filters, sorted and capped, and returns them as an array. The array is ready to feed a Loop: one iteration per row. To fetch one row by its key, use Table — find a row.

At a glance ​

  • Type: table.list · version 1
  • Category: Data
  • Kind: Step — one stage of a run
  • Effect: No external effect (none) — nothing is written outside Mankomail; safe to replay
  • Needs a carrier email: No
  • Connection: None
  • Inputs: main
  • Outputs: main

Parameters ​

table ​

Table — Picked from the list, or by its short identifier (its “slug”), which may come from a template.

  • Type: Remote resource (resourceLocator)
  • Required: Yes
  • Ways to choose: pick from a list, type an ID (table)

filters ​

Filters — No filter: every row, up to the requested limit.

  • Type: List of items (collection)
  • Required: No
  • Default: []
  • At most 10 items
  • Each item has:
    • column — Column
      • Type: Text (string)
      • Required: Yes
      • Default: "" (empty)
      • 60 characters at most
      • Expressions: {{ }} not accepted
    • op — Operator
      • Type: One choice (options)
      • Required: Yes
      • Default: eq
      • Options:
        • eq — equals
        • ne — does not equal
        • contains — contains
        • not_contains — does not contain
        • starts_with — starts with
        • ends_with — ends with
        • gt — is greater than
        • gte — is greater than or equal to
        • lt — is less than
        • lte — is less than or equal to
        • empty — is empty
        • not_empty — is not empty
    • value — Value
      • Type: Text (string)
      • Required: No
      • Default: "" (empty)
      • 10000 characters at most

match ​

How filters combine

  • Type: One choice (options)
  • Required: Yes
  • Default: all
  • Options:
    • all — All must match
    • any — At least one must match

sortColumn ​

Sort by — Left empty: the table’s own order (the order rows were added).

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 60 characters at most
  • Expressions: {{ }} not accepted

sortDirection ​

Sort direction

  • Type: One choice (options)
  • Required: No
  • Default: asc
  • Options:
    • asc — Ascending
    • desc — Descending
  • Shown when: sortColumn is filled in

limit ​

Maximum number of rows — An unbounded read is a step whose size depends on what someone pasted into a spreadsheet.

  • Type: Number (number)
  • Required: Yes
  • Default: 100
  • Whole number, from 1 to 1000

Outputs ​

  • main

Data produced ​

What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).

  • {{ data.<step>.rows }} — array of { <column>: value }. The matching rows, each one an object of cells by column machine key: {{ data.<step>.rows.0.consultant }}. Empty cells are absent.
  • {{ data.<step>.rowIds }} — array. The row identifiers, in the same order as rows: {{ data.<step>.rowIds.0 }} belongs to rows.0.
  • {{ data.<step>.count }} — number. The number of rows returned.
  • {{ data.<step>.truncated }} — boolean. true when more rows matched than the limit allowed.
  • {{ data.<step>.summary }} — string. A one-line summary, for example 12 rows read.

Example ​

Every Monday, a scheduled workflow chases the cases still open. The table cases has columns status, client_email and opened_on (a date). An earlier Compute a date step named "Cutoff" gives the cutoff date. The node is named "Open cases".

text
table          cases
filters        status  equals  Open
               opened_on  is less than  {{ data.cutoff.date }}
match          all
sortColumn     opened_on
sortDirection  asc
limit          200

A Loop then takes {{ data.open_cases.rows }} as its items. Inside the loop body, each row is {{ data.item }}, so a reminder can go to {{ data.item.client_email }}.

Tips ​

  • Columns are named by their machine key, not their heading, in filters and in Sort by. A filter or a sort column that does not exist in the table is ignored without an error: a mistyped filter returns every row. Check the key in the column settings.
  • Text comparisons (equals, contains, starts with…) ignore case and accents. is empty and is not empty take no value. is greater/less than compare numerically on a Number column (write the value with a dot as decimal separator) and as text otherwise, which orders ISO dates correctly.
  • Combining filters. All must match keeps rows that pass every filter; At least one must match keeps rows that pass one of them. No filter returns every row, up to the limit. At most 10 filters.
  • Limit. Between 1 and 1,000 rows, 100 by default. When more rows match, the first ones (in the sort order) are returned and truncated is true. Without Sort by, rows come in the order they were added.
  • Errors. Unknown table: table.not_found, final.
  • Test runs. Reading is real, even in a test. See Test runs.