Filter documents by ID in Sanity Desk Structure

8 replies
Last updated: Jan 28, 2026
I’m trying to figure out how to filter out a document by an ID in sanity studio using desk structure
S.listItem()
        .title("Audit template")
        .icon(FaBible)
        .child(
          S.document()
            .schemaType("revisionTemplate")
            .documentId("sourceDocument")
        ),
      S.listItem()
        .title("Audits")
        .child(
          S.document()
            .filter((item) => item.getId() !== "sourceDocument")
            .schemaType("revisionTemplate")
        ),
Here I’m trying to keep the version of revisionTemplate with a set documentId seperated from all the instances of the document
AI Update

Looking at your code, I can see the issue. When you want to create a filtered list of documents in Structure Builder, you should use S.documentList() or S.documentTypeList() instead of S.document(), since S.document() is for rendering a single specific document, not a list.

Here's how to fix your code:

S.listItem()
  .title("Audit template")
  .icon(FaBible)
  .child(
    S.document()
      .schemaType("revisionTemplate")
      .documentId("sourceDocument")
  ),
S.listItem()
  .title("Audits")
  .child(
    S.documentList()
      .title("Audits")
      .filter('_type == "revisionTemplate" && _id != "sourceDocument"')
      .schemaType("revisionTemplate")
  ),

The key changes:

  1. Use S.documentList() instead of S.document() - this creates a list view that can display multiple documents
  2. Use the .filter() method with a GROQ query - the filter takes a GROQ string, not a function. In your case: '_type == "revisionTemplate" && _id != "sourceDocument"'
  3. Add a .title() to give your list a proper heading

This setup will give you two separate list items in your Structure:

  • "Audit template" - shows only the single document with ID "sourceDocument"
  • "Audits" - shows all other revisionTemplate documents except the one with ID "sourceDocument"

The Structure Builder documentation explains that S.documentList() is specifically designed for creating filtered lists of documents, and it accepts GROQ filter strings to query which documents to display. You can also check out the getting started guide for more examples of filtering and organizing documents.

Show original thread
8 replies

Sanity – Build the way you think, not the way your CMS thinks

Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.

Was this answer helpful?