将引用数组限制为尚未引用的文档

Limit array of references to documents that have not been referenced yet

我有一个“引用选择器”(即编辑者可以选择要引用的文档的模块)但我想将结果限制为尚未引用的文档。

这是我在另一个文档中使用的参考选择器的架构:

export default {
  title: 'Project Selector',
  name: 'projectSelector',
  type: 'object',
  fields: [
    {
      title: 'Project',
      name: 'project',
      type: 'reference',
      to: [
        { type: 'project' }
      ],
      options: {
        filter: // What does my filter need to look like?
      }
    }
  ]
}

export default {
  title: 'Home Page',
  name: 'homePage',
  type: 'document',
  fields: [
    {
       title: 'Projects',
       name: 'projectsGrid',
       type: 'array',
       of: [
         { type: 'projectSelector' }
       ],
    },
  ]
}

请注意,projectSelector 对象和 homePage 文档不共享任何父<>子关系。

只要我们谈论的是选择尚未在该数组中选择的文档,我会用类似的方法来处理它:

options: {
  filter: ({ document }) => {
    const refList = document?.projectsGrid.map(item => {
      return item?.project?._ref
    })
    
    return {
      filter: '!(@._id in $list) && !(_id in path("drafts.**"))',
      params: { list: refList }
    }
  }
},

这应该映射现有的参考文献,return _refs,然后在添加新参考文献时查阅该列表以将其过滤掉。