Metaobject query filter

Live examples against test_booking_slot. Each card shows the filter call and what it returns.

Integer ranges

Split the day into windows using >= and < on a number field.

Morning 6

shop.metaobjects.test_booking_slot
  | query: "fields.slot_number:>=1 fields.slot_number:<13 fields.status:available"
,
    sort_key: "fields.slot_number"
  • #1 Oct 27, 9:00 AM · Alex
  • #1 Nov 2, 2:00 AM · Cassie
  • #3 Oct 28, 5:00 AM · Jenna

+ 3 more

Afternoon 8070

shop.metaobjects.test_booking_slot
  | query: "fields.slot_number:>=13 fields.status:available"
,
    sort_key: "fields.slot_number"
  • #501 Nov 2, 2:00 AM
  • #504 Nov 2, 3:30 AM
  • #1002 Nov 2, 2:30 AM

+ 8067 more

Negation and "has a value"

A leading - negates a term. :* matches any value that's present.

Not available 5270

shop.metaobjects.test_booking_slot
  | query: "-fields.status:available"

No stylist assigned 2922

shop.metaobjects.test_booking_slot
  | query: "-fields.stylist:* fields.status:available"

Stylist assigned 5154

shop.metaobjects.test_booking_slot
  | query: "fields.stylist:* fields.status:available"

Prefix match on text

A trailing * matches any value that starts with the prefix.

shop.metaobjects.test_booking_slot
  | query: "fields.status:avail*"

8076 matching slots

  • #1 Oct 27, 9:00 AM · Alex
  • #3 Oct 28, 5:00 AM · Jenna
  • #4 Oct 28, 6:00 AM · Jenna

+ 8073 more

Sorting and reverse

Same query, three orderings. sort_key takes a field or a system attribute.

Highest slot number first

shop.metaobjects.test_booking_slot
  | query: "fields.status:available"
,
    sort_key: "fields.slot_number"
,
    reverse: true
  • #30000 May 29, 10:30 AM · Martha
  • #29999 May 29, 10:00 AM · Martha
  • #29998 May 29, 9:30 AM · Martha

+ 8073 more

Recently edited

shop.metaobjects.test_booking_slot
  | query: "fields.status:available"
,
    sort_key: "updated_at"
,
    reverse: true
  • #3 Nov 2, 3:00 AM · Cassie
  • #1 Nov 2, 2:00 AM · Cassie
  • #23999 Jan 24, 9:00 AM · Martha

+ 8073 more

By handle

shop.metaobjects.test_booking_slot
  | query: "fields.status:available"
,
    sort_key: "handle"
  • #1 Nov 2, 2:00 AM · Cassie
  • #3 Nov 2, 3:00 AM · Cassie
  • #5 Nov 2, 4:00 AM

+ 8073 more

Availability per stylist (counts only)

Two queries for each stylist, binding $s to the loop variable. Only .size is read.

shop.metaobjects.test_booking_slot
  | query: "fields.stylist:$s fields.status:available",
    s: s

shop.metaobjects.test_booking_slot
  | query: "fields.stylist:$s -fields.status:available",
    s: s

StylistOpenBooked
Alex 1 1
Bobbie 296 206
Cassie 124 76
Jenna 4 0
Martha 4499 2860
Sally 230 176

Pagination

Each filtered list has its own page key, so two paginated lists on one page page separately.

shop.metaobjects.test_booking_slot
  | query: "fields.status:available"
,
    sort_key: "fields.slot_number"
  • #4476 Nov 11, 11:30 PM
  • #4479 Nov 12, 1:00 AM
  • #4480 Nov 12, 1:30 AM
  • #4481 Nov 12, 2:00 AM
  • #4483 Nov 12, 3:00 AM
  • #4485 Nov 12, 4:00 AM
  • #4486 Nov 12, 4:30 AM
  • #4487 Nov 12, 5:00 AM
  • #4489 Nov 12, 6:00 AM
  • #4490 Nov 12, 6:30 AM

Merchant-editable filter

Bindings come from section settings, so merchants can change the filter in the theme editor without touching code.

shop.metaobjects.test_booking_slot
  | query: "fields.stylist:$who fields.status:$status",
    who: section.settings.stylist (or this stylist), status: section.settings.status

4 slots for Jenna with status available

  • #3 Oct 28, 5:00 AM · Jenna
  • #4 Oct 28, 6:00 AM · Jenna
  • #15886 Nov 10, 2:30 AM · Jenna
  • #15887 Nov 10, 3:00 AM · Jenna