Query Column Values
Retrieve column information and values from your boards.
Query Board Columns
Get all columns for a board:
ruby
require "monday_ruby"
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
end
client = Monday::Client.new
response = client.column.query(
args: { ids: [1234567890] } # Board ID
)
if response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
puts "Found #{columns.length} columns:"
columns.each do |column|
puts " • #{column['title']}: '#{column['id']}' (#{column['type']})"
end
endOutput:
Found 7 columns:
• Name: 'name' (name)
• Status: 'status' (color)
• Owner: 'people' (people)
• Due Date: 'date4' (date)
• Priority: 'status_1' (color)
• Text: 'text' (text)
• Budget: 'numbers' (numbers)Query Column Details
Get detailed column information:
ruby
response = client.column.query(
args: { ids: [1234567890] },
select: [
"id",
"title",
"description",
"type",
"width",
"settings_str",
"archived"
]
)
if response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
columns.each do |column|
puts "\n#{column['title']}"
puts " ID: #{column['id']}"
puts " Type: #{column['type']}"
puts " Width: #{column['width']}"
puts " Archived: #{column['archived']}"
puts " Description: #{column['description']}" if column['description']
end
endQuery Multiple Boards
Get columns for multiple boards:
ruby
response = client.column.query(
args: { ids: [1234567890, 2345678901] },
select: ["id", "title", "type"]
)
if response.success?
boards = response.body.dig("data", "boards")
boards.each do |board|
columns = board["columns"] || []
puts "\nBoard #{board['id']} has #{columns.length} columns"
columns.each do |column|
puts " • #{column['title']} (#{column['type']})"
end
end
endFind Column by Title
Search for a column by its title:
ruby
def find_column_by_title(client, board_id, title)
response = client.column.query(
args: { ids: [board_id] },
select: ["id", "title", "type"]
)
return nil unless response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
columns.find { |col| col["title"].downcase == title.downcase }
end
# Usage
column = find_column_by_title(client, 1234567890, "Status")
if column
puts "Found: #{column['title']}"
puts " ID: #{column['id']}"
puts " Type: #{column['type']}"
else
puts "Column not found"
endGet Column ID by Title
Quickly get a column's ID:
ruby
def get_column_id(client, board_id, title)
column = find_column_by_title(client, board_id, title)
column&.dig("id")
end
# Usage
column_id = get_column_id(client, 1234567890, "Status")
puts "Status column ID: #{column_id}" # => statusFilter Columns by Type
Find all columns of a specific type:
ruby
def find_columns_by_type(client, board_id, column_type)
response = client.column.query(
args: { ids: [board_id] },
select: ["id", "title", "type"]
)
return [] unless response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
columns.select { |col| col["type"] == column_type }
end
# Find all status columns
status_columns = find_columns_by_type(client, 1234567890, "color")
puts "Found #{status_columns.length} status columns:"
status_columns.each do |col|
puts " • #{col['title']} (#{col['id']})"
endQuery Column Values for Items
Get column values for specific items:
ruby
# Query items with their column values
response = client.item.query(
args: { ids: [987654321, 987654322] },
select: [
"id",
"name",
{
column_values: ["id", "text", "type", "value"]
}
]
)
if response.success?
items = response.body.dig("data", "items")
items.each do |item|
puts "\n#{item['name']}"
puts "Column Values:"
item["column_values"].each do |col_val|
next if col_val["text"].nil? || col_val["text"].empty?
puts " • #{col_val['id']}: #{col_val['text']} (#{col_val['type']})"
end
end
endParse Column Settings
Extract column settings (e.g., status labels):
ruby
require "json"
response = client.column.query(
args: { ids: [1234567890] },
select: ["id", "title", "type", "settings_str"]
)
if response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
columns.each do |column|
next unless column["settings_str"]
settings = JSON.parse(column["settings_str"])
puts "\n#{column['title']} (#{column['type']})"
puts " Settings: #{settings.keys.join(', ')}"
# For status columns, show labels
if column["type"] == "color" && settings["labels"]
puts " Labels:"
settings["labels"].each do |id, label|
puts " #{id}: #{label}"
end
end
end
endGet Column Structure
Build a map of column IDs to titles:
ruby
def get_column_map(client, board_id)
response = client.column.query(
args: { ids: [board_id] },
select: ["id", "title", "type"]
)
return {} unless response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
columns.each_with_object({}) do |col, hash|
hash[col["id"]] = {
title: col["title"],
type: col["type"]
}
end
end
# Usage
column_map = get_column_map(client, 1234567890)
puts "Column Map:"
column_map.each do |id, info|
puts " #{id} => #{info[:title]} (#{info[:type]})"
endQuery Archived Columns
Find archived columns:
ruby
response = client.column.query(
args: { ids: [1234567890] },
select: ["id", "title", "type", "archived"]
)
if response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
archived = columns.select { |col| col["archived"] }
if archived.any?
puts "Archived columns:"
archived.each do |col|
puts " • #{col['title']} (#{col['id']})"
end
else
puts "No archived columns"
end
endExport Column Structure to CSV
Export column information:
ruby
require "csv"
def export_columns_to_csv(client, board_id, filename)
response = client.column.query(
args: { ids: [board_id] },
select: ["id", "title", "type", "description", "width"]
)
return unless response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
CSV.open(filename, "w") do |csv|
# Header
csv << ["ID", "Title", "Type", "Description", "Width"]
# Data
columns.each do |column|
csv << [
column["id"],
column["title"],
column["type"],
column["description"] || "",
column["width"]
]
end
end
puts "✓ Exported #{columns.length} columns to #{filename}"
end
# Usage
export_columns_to_csv(client, 1234567890, "board_columns.csv")Complete Example
Comprehensive column querying:
ruby
require "monday_ruby"
require "dotenv/load"
Monday.configure do |config|
config.token = ENV["MONDAY_TOKEN"]
end
client = Monday::Client.new
board_id = 1234567890
response = client.column.query(
args: { ids: [board_id] },
select: [
"id",
"title",
"description",
"type",
"width",
"archived"
]
)
if response.success?
boards = response.body.dig("data", "boards")
columns = boards.first&.dig("columns") || []
puts "\n📊 Board Column Structure\n#{'=' * 60}\n"
puts "Total columns: #{columns.length}"
# Group by type
by_type = columns.group_by { |col| col["type"] }
puts "\nColumns by Type:"
by_type.each do |type, cols|
puts " #{type}: #{cols.length} column(s)"
end
puts "\n#{'=' * 60}\n"
puts "Column Details:\n"
columns.each_with_index do |column, index|
puts "\n#{index + 1}. #{column['title']}"
puts " ID: #{column['id']}"
puts " Type: #{column['type']}"
puts " Width: #{column['width']}"
puts " Archived: #{column['archived']}"
puts " Description: #{column['description']}" if column['description']
end
puts "\n#{'=' * 60}"
else
puts "❌ Failed to query columns"
puts "Status: #{response.status}"
endOutput:
📊 Board Column Structure
============================================================
Total columns: 8
Columns by Type:
name: 1 column(s)
color: 2 column(s)
people: 1 column(s)
date: 1 column(s)
text: 1 column(s)
numbers: 1 column(s)
long-text: 1 column(s)
============================================================
Column Details:
1. Name
ID: name
Type: name
Width: 250
Archived: false
2. Status
ID: status
Type: color
Width: 120
Archived: false
Description: Current status of the task
3. Owner
ID: people
Type: people
Width: 150
Archived: false
...
============================================================