Check out v4 of the Fauna CLI
v4 of the Fauna CLI is now in beta. The new version introduces enhancements to the developer experience, including an improved authentication workflow. To get started, check out the CLI v4 quick start. |
Operators
This section describes the FQL operators. See Operator precedence for the operator precedence and associativity table.
Assignment
Operator | Syntax | Description |
---|---|---|
|
variable [:type] |
Simple assignment operator assigns the value to the declared variable. The optional :type notation constrains a value to the given type, where
type is one of the supported Types. For example, |
Arithmetic
The arithmetic operators perform arithmetic operations on numeric operands.
Operator | Syntax | Description |
---|---|---|
|
operand1 |
Addition, sums the operands. |
|
operand1 |
Subtraction, subtracts operand2 from operand1. |
|
operand1 |
Multiplication, multiplies the operands. |
|
operand1 |
Division, divides operand1 by operand2. |
|
operand1 |
Modulo, returns the remainder of operand1 divided by operand2 and takes the sign of the dividend. |
|
operand1 |
Exponentiation, returns the result of raising operand1 to the power of operand2. |
Concatenation
The plus operator performs concatenation on sting operands.
Operator | Syntax | Description |
---|---|---|
|
operand1 |
For String operands, concatenates the operands, left-to-right. |
Comparison
Comparison operators return a Boolean value.
For the <
, >
, ⇐
, and >=
operators, comparison across types always
returns false
and comparing non-comparable objects always returns false
.
Operator | Syntax | Description |
---|---|---|
|
expression1 |
Equal to. Returns
|
|
expression1 |
Not equal to. Returns |
|
expression1 |
Greater than. Returns
|
|
expression1 |
Greater than or equal to. Returns
|
|
expression1 |
Less than. Returns
|
|
expression1 |
Less than or equal to. Returns
|
|
expression1 |
Evaluate if expression1 is of type <type>, which can be any of the
supported runtime Types. The <type> must
be a module object. |
Logical
Logical operators return a Boolean value.
Operator | Syntax | Description |
---|---|---|
|
operand1 |
Logical OR. Returns |
|
operand1 |
Logical AND. Returns |
Bitwise operators
Operator | Syntax | Description | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
expression1 | expression2 |
Bitwise inclusive OR:
|
|||||||||||||||
|
expression1 ^ expression2 |
Bitwise exclusive OR (XOR):
|
|||||||||||||||
|
expression1 & expression2 |
Bitwise AND:
|
Unary
Operator | Syntax | Description |
---|---|---|
|
|
Unary negation. Negates the operand it precedes. |
|
|
Logical negation (NOT). Inverts the value of the Boolean operand and returns a Boolean value. |
Examples:
Unary negation variations:
-5 // -5. A negative literal, not unary negation.
- 5 // -5. Unary negation applied to a literal.
let num = 5
-num // -5. Unary negation of a variable.
Insert a space between -
and operand if operand is a literal
Number.
Logical NOT:
!false // true
Optional chaining
Operator | Syntax | Description |
---|---|---|
|
object object |
Optional chaining. When accessing a field or invoking a method, if the
left side of the expression evaluates to |
Examples:
let customer = {
name: "Alice Appleseed",
address: {
state: "DC"
}
}
customer.address?.state
The optional chaining operator can also be used with methods:
let customer = {
name: "Alice Appleseed",
address: {
state: "DC"
}
}
customer.name?.toLowerCase()
Null coalescing
Operator | Syntax | Description |
---|---|---|
|
expression1 |
Null coalescing. If expression1 evaluates to |
Example:
// Gets a `Customer` collection document.
let customer = Customer.byEmail("carol.clark@example.com").first()
// This customer's `cart` field is `null`.
customer?.cart ?? "Not found" // returns "Not found"
Non-null assertion postfix
Operator | Syntax | Description |
---|---|---|
|
expression |
Non-null assertion postfix. Runtime validation: if expression evaluates to
|
Example:
let customer = {
name: "Alice Appleseed",
address: {
state: "DC"
}
}
customer.date! // Returns an error.
Ternary operator
FQL doesn’t have a ternary (conditional) operator. You can get the same result
using an if … else
statement. For
example, to perform an upsert:
// Customer email to look up
let email = "alice.appleseed@example.com"
// Customer data to upsert
let data = {
name: "Alice Appleseed",
email: "alice.appleseed@example.com",
address: {
street: "87856 Mendota Court",
city: "Washington",
state: "DC",
postalCode: "20220",
country: "US"
}
}
// Try to find the existing customer by email.
// If the customer doesn't exist, returns `null`.
let customer = Customer.byEmail(email).first()
// Create or update the customer
// based on existence.
if (customer == null) {
Customer.create(data)
} else {
customer!.update(data)
}
Is this article helpful?
Tell Fauna how the article can be improved:
Visit Fauna's forums
or email docs@fauna.com
Thank you for your feedback!