Joint session with Vercel: How to build intelligent storefronts (May 15th)

GROQ Query for new and unpublished Documents

Not all Unpublished Documents are created equal

By Simeon Griggs & Peter


Querying for Draft Documents

{
  "unpublishedAll": *[_id in path("drafts.**")],
  "unpublishedNew": *[_id in path("drafts.**") && count(*[^._id == "drafts." + _id]) == 0],
  "unpublishedModified": *[count(*[_id in [^._id, "drafts." + ^._id]]) > 1]
}

Draft / Unpublished Documents can be queried by looking for any Document which has an _id that begins with drafts. but determining if the Document has ever been Published before requires more work.

An existing, previously published Document with unpublished changes will exist as two Documents that can be returned by an authenticated query, their _id's look something like:

  • asdf-1234
  • drafts.asdf-1234

However, a new Document that has never been published will only exist with an _id that begins with drafts.

When this snippet is run, the number of results in unpublishedAll should equal the sum of the results in unpublishedNew and unpublishedModified.

Note: These example queries are not optimised and are intended for use cases like document lists for your Dashboard.

The three query keys explained:

  1. unpublishedAll will return all Documents with an _id beginning with drafts.
  2. unpublishedNew does the same search but only returns Documents for which it can also find Published _id's.
  3. unpublishedModified finds as many Documents where both a published and draft _id for the same document exist.

Contributors

Simeon Griggs

Customer Education at Sanity

Visit Simeon Griggs's profile

Peter

Runs Support @ Sanity.io

Spain

Visit Peter's profile