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 12

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
  • #3 Oct 28, 5:00 AM · Jenna

+ 9 more

Afternoon 17877

shop.metaobjects.test_booking_slot
  | query: "fields.slot_number:>=13 fields.status:available"
,
    sort_key: "fields.slot_number"
  • #13 Nov 2, 8:00 AM
  • #14 Nov 2, 8:30 AM
  • #15 Nov 2, 9:00 AM

+ 17874 more

Negation and "has a value"

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

Not available 12015

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

No stylist assigned 10984

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

Stylist assigned 6905

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*"

17889 matching slots

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

+ 17886 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

+ 17886 more

Recently edited

shop.metaobjects.test_booking_slot
  | query: "fields.status:available"
,
    sort_key: "updated_at"
,
    reverse: true
  • #23999 Jan 24, 9:00 AM · Martha
  • #23997 Jan 24, 8:00 AM · Martha
  • #23995 Jan 24, 7:00 AM · Martha

+ 17886 more

By handle

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

+ 17886 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 297 206
Cassie 293 207
Jenna 4 0
Martha 6029 3895
Sally 281 219

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"
  • #39 Nov 2, 9:00 PM
  • #41 Nov 2, 10:00 PM
  • #43 Nov 2, 11:00 PM
  • #44 Nov 2, 11:30 PM
  • #45 Nov 3, 12:00 AM
  • #46 Nov 3, 12:30 AM
  • #47 Nov 3, 1:00 AM
  • #48 Nov 3, 1:30 AM
  • #50 Nov 3, 2:30 AM
  • #54 Nov 3, 4: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, 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