在 sanity studio 中,您可以获得所有文档的最新版本的不错列表。如果有草稿,您会收到草稿,如果没有,您会收到已发布的草稿。
我需要一些过滤器和脚本的相同列表。以下 groq 可以完成这项工作,但速度不是很快,并且在新 API (v2021-03-25) 中不起作用。
*[
_type == $type &&
!defined(*[_id == "drafts." + ^._id])
]._id
Run Code Online (Sandbox Code Playgroud)
解决 API 中重大变化的一种方法是使用length() = 0in 代替,!defined()但这会使本来就很慢的查询速度慢 10-20 倍。
有谁知道一种制作仅考虑最新版本的过滤器的方法?
编辑:我需要这个的一个例子是,如果我想查看没有任何类别的所有文档。无论是已发布的文档还是没有类别的草稿,它都会显示在普通过滤器中。因此,如果您添加类别但不立即想要发布,那么它在无类别列表中将会令人困惑。,'-)
API v 改进 100 倍2021-03-25
我能够快速解决这个问题的唯一方法是首先对子查询进行投影,这样它就不会为每个非草稿运行一次。然后我想,为什么不投影两组,然后找出重叠部分,这样会更快!它的运行速度比 API v1 上的运行速度快 10 倍以上,比新 API 的任何建议快 100 倍。
{
'drafts': *[ _type == $type && _id in path("drafts.**") ]._id,
'published': *[ _type == $type && !(_id in path("drafts.**"))]._id,
}
{
'current': published[ !("drafts." + @ in ^.drafts) ] + drafts
}
Run Code Online (Sandbox Code Playgroud)
publisheddrafts并过滤掉我的“变量”中具有对应项的任何内容| 归档时间: |
|
| 查看次数: |
3592 次 |
| 最近记录: |