You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sanity.io API创建Mutation:如何将字符串识别为Reference类型

问题描述

我正在搭建一个电商网站,在向Order文档的orderItems数组中添加订单项时遇到问题。我尝试在orderItem中引用customer文档和product文档,当前提交的对象数组如下:

[
  {
    productId: '5b79b3f8-6ef8-4c6d-bd85-5dcb14fb836d',
    kundenId: 'c3777230-74cd-411b-a455-7fa905c90957',
    quant: 1,
    name: 'Position 1'
  }
]

请问如何让Sanity将这些字符串识别为_ref?我的Schema定义如下:

Order Item Schema

export default {
  title: 'Order Item',
  name: 'orderItem',
  type: 'object',
  fields: [
    {
      title: 'Name',
      name: 'name',
      type: 'string',
    },
    {
      name: 'kundenId',
      title: 'Customer',
      type: 'reference',
      to: [{ type: 'customer' }],
      options: {
        disableNew: true,
      },
    },
    {
      name: 'productId',
      title: 'Product',
      type: 'reference',
      to: [{ type: 'product' }],
      options: {
        disableNew: true,
      },
    },
    {
      title: 'Quantity',
      name: 'quant',
      type: 'number',
    },
    {
      title: 'Price',
      name: 'price',
      type: 'number',
    },
  ],
};

Order Schema

export default {
  name: 'order',
  title: 'Order',
  type: 'document',
  fields: [
    {
      name: 'user',
      title: 'User',
      type: 'reference',
      to: [{ type: 'user' }],
      options: {
        disableNew: true,
      },
    },
    {
      name: 'userName',
      title: 'User Name',
      type: 'string',
    },
    {
      title: 'Order Items',
      name: 'orderItems',
      type: 'array',
      of: [
        {
          title: 'Order Item',
          type: 'orderItem',
        },
      ],
    },
    {
      title: 'CreatedAt',
      name: 'createdAt',
      type: 'datetime',
    },
  ],
};

错误提示截图:
Sanity错误截图


解决方案

Sanity的reference类型字段要求传入的是包含_ref属性的对象,而非直接传入ID字符串。你需要修改提交的订单项结构,把productId和kundenId的字符串ID包装成符合引用格式的对象:

修改后的提交数组

[
  {
    productId: { _ref: '5b79b3f8-6ef8-4c6d-bd85-5dcb14fb836d' },
    kundenId: { _ref: 'c3777230-74cd-411b-a455-7fa905c90957' },
    quant: 1,
    name: 'Position 1'
  }
]

额外说明

  • 若要避免同ID不同文档类型的冲突,可额外添加_type属性明确指定文档类型:
    productId: { 
      _ref: '5b79b3f8-6ef8-4c6d-bd85-5dcb14fb836d',
      _type: 'product' 
    }
    
  • 确保传入的ID对应存在有效的customer和product文档,否则Sanity会验证失败。

内容的提问来源于stack exchange,提问作者alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:31:05