Skip to content

select Operator ​

The select operator transforms and projects document fields.

Syntax ​

| select { <field_mappings> }

Description ​

This operator transforms documents by projecting specific fields, computing new values, and restructuring the document shape. It serves as the primary mechanism for data transformation within processing pipelines.

Field Mappings ​

Basic Field Mapping ​

field: expression

Maps a field to the result of an expression.

Shorthand Field Mapping ​

field

Shorthand for field: field - includes the field as-is.

Spread All Fields ​

...*

Includes all fields from the source document.

Spread Expression ​

...expression

Spreads all fields from the result of an expression.

Field Exclusion ​

-field

Excludes a field from the output.

Examples ​

Basic Projection ​

| select { id: id, name: name, age: age }
| select { id, name, age }  // Shorthand
| select { id, name, computed_age: age + 1 }

Field Transformation ​

| select { 
    id, 
    temp_celsius: temperature,
    temp_fahrenheit: temperature * 1.8 + 32,
    is_hot: temperature > 25
  }

Spread Operations ​

| select { id, ...* }  // Include id plus all other fields
| select { ...*, alert: true }  // All fields plus alert
| select { ...user, user_id: user.id }  // Spread user object plus user_id

Field Exclusion ​

| select { ...*, -internal_field }  // All fields except internal_field
| select { id, name, -password, -secret }  // Include id, name, exclude sensitive fields

Complex Transformations ​

| select {
    id,
    location: { lat: latitude, lng: longitude },
    status: if(active, "online", "offline"),
    metadata: { ...config, timestamp: now() }
  }

Array and Object Operations ​

| select {
    id,
    first_item: items[0],
    item_count: items.length,
    user_info: { ...user, display_name: user.first_name + " " + user.last_name }
  }

Conditional Field Inclusion ​

| select {
    id,
    ...(include_details ? { details: full_details } : {}),
    ...(is_admin ? { admin_data: sensitive_data } : {})
  }

Advanced Patterns ​

Nested Object Restructuring ​

| select {
    id,
    contact: {
      email: user.email,
      phone: user.phone,
      address: { ...user.address }
    },
    preferences: { ...user.preferences }
  }

Array Transformations ​

| select {
    id,
    tags: tags.map(tag => tag.name),
    scores: scores.filter(score => score > 0),
    total: items.reduce((sum, item) => sum + item.value, 0)
  }

Computed Fields with Functions ​

| select {
    id,
    name,
    name_length: length(name),
    upper_name: to_upper(name),
    created_date: format_date(timestamp, "YYYY-MM-DD")
  }

Performance Considerations ​

  • Field exclusion (-field) works efficiently with large documents
  • Spread operations (...*) can be expensive with large objects
  • Complex expressions evaluate for each document
  • Consider multiple SELECT operators for complex transformations
  • WHERE - Filter documents before transformation
  • SUMMARIZE - Aggregate data with field projection