Fetching posts by slug (using GROQ) will return two versions, the published one and the new draft. Is there a way to tell them apart?

6 replies
Last updated: Nov 26, 2020

If i've got a published post, and I edit it. Fetching posts by slug (using GROQ) will return two versions, the published one and the new draft. Other than the fact that the IDs for drafts have a prefix of

drafts.
is there a way to tell them apart? Essentially I want to make sure the live page doesn't return any draft versions. This is all happening in my GraphQL server with a private dataset, so all my sanity client queries have a token.

Nov 26, 2020, 5:25 PM

ah, looks like the prefix method is the trick:

!(_id in path("drafts.**"))
from the GROQ docs

Nov 26, 2020, 5:37 PM

smoother handling of drafts in on the backlog (this filter works but is a bit verbose for a relatively common task)

Nov 26, 2020, 6:02 PM

can there ever be multiple drafts for a given entity?

Nov 26, 2020, 6:03 PM

not at the moment, that is, I guess you sort of have it in the revision history

Nov 26, 2020, 6:04 PM

i'm just pondering whether I can put my entire site into preview mode and avoid weird duplicates

Nov 26, 2020, 6:05 PM

which I suppose would also mean favouring the draft version when there are two records with the same slug

Nov 26, 2020, 6:06 PM

Sanity.io: Get the most out of your content

Sanity.io is a platform to build websites and applications. It comes with great APIs that let you treat content like data. Give your team exactly what they need to edit and publish their content with the customizable Sanity Studio. Get real-time collaboration out of the box. Sanity.io comes with a hosted datastore for JSON documents, query languages like GROQ and GraphQL, CDNs, on-demand asset transformations, presentation agnostic rich text, plugins, and much more.

Don't compromise on developer experience. Join thousands of developers and trusted companies and power your content with Sanity.io. Free to get started, pay-as-you-go on all plans.