- 3 minutes to read

Formula - Count

The count function, one of the Math functions in the Formula plugin for Search Field Expressions, returns how many values the content holds.

Syntax

count(content [, unique])

Parameters

Parameter Required Description
content ✅ Yes The values to count: body, context, or another Formula function such as xPath or jsonPath.
unique ❌ No Unquoted true or false; default true for this function. false: a value that appears several times counts every time. true: identical values count once. Values are compared as text, so 100 and 100.00 are different values. A quoted 'true' is an error.

Returns

  • One number: how many values content holds.
  • Duplicates are counted once by default, because unique defaults to true for count (see Example 5). Use count(..., false) to count every occurrence.

Quoting, nesting, and how content is resolved are described in the Formula language rules.

Examples

Example 1: Count the orders in an XML message

Input

Message Body:

<ns0:Orders xmlns:ns0="SupplyChain.Schemas/1.0">
  <Order>
    <Id>1337</Id>
    <Amount>666</Amount>
    <City>New York</City>
    <Partner>QWNtZQ==</Partner>
  </Order>
  <Order>
    <Id>1338</Id>
    <Amount>42</Amount>
    <City>Paris</City>
    <Partner>QWNtZQ==</Partner>
  </Order>
</ns0:Orders>

Formula

count(xPath('Orders/Order/Id', body))

Result

2

xPath returns the two order ids, 1337 and 1338.

Test Expression tab: count(xPath('Orders/Order/Id', body)) on a message with two orders returns 2 (7.10)
Counting the Id elements gives the number of orders in the message, here 2.

Example 2: Count the message body

Input

Message Body:

Nodinite

Formula

count(body)

Result

1

Test Expression with count(body) on the message body Nodinite, returning 1
The whole message body is one value, so count returns 1.

Example 3: Count a message context value

Input

Message Context:

Key Value
id Nodinite

Formula

count(context('id'))

Result

1

Test Expression with count(context('id')) on the context key id with value Nodinite, returning 1
The context key id holds one value, so count returns 1.

Example 4: Count the values extracted from JSON

Input

Message Body:

{a:[{b:'This'},{b:'is'},{b:'Formula Plugin'}]}

Formula

count(jsonPath('a[*].b', body))

Result

3

Test Expression with count of jsonpath over every b in the array a, on a JSON array with three values, returning 3
jsonPath extracts This, is, and Formula Plugin, so count returns 3.

Example 5: Count values that contain duplicates

Input

Message Body:

{a:[{b:'This'},{b:'is'},{b:'is'},{b:'Formula Plugin'}]}

Formula

count(jsonPath('a[*].b', body))

Result

3

Test Expression with count of jsonpath over every b in the array a, on a JSON array where the value is appears twice, returning 3
The array holds four values, but is appears twice and is counted once, so count returns 3.

Example 6: Count values across several message context keys

Input

Message Context:

Key Value
id <Orders><Id>3</Id><Id>6</Id></Orders>
id2 <Orders><Id>4</Id><Id>5</Id></Orders>

Formula

count(xPath('/Orders/Id', context(regex('id.*'))))

Result

4

Test Expression with count(xpath('/Orders/Id', context(regex('id.*')))) on two context keys holding XML, returning 4
context(regex('id.*')) returns both XML values, and xPath extracts two ids from each, so count returns 4.

Next Steps