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

如何在Contentful中按对象数组字段进行查询?

解决Contentful Delivery API筛选包含特定国家条目问题

我明白你现在遇到的困扰了——直接用fields.countries=xxx查询会报错,核心原因是countries是一个包含链接对象的数组,equals操作符没法直接作用在对象类型的字段上。

正确的查询方式

Contentful的Delivery API针对数组类型的引用字段,需要通过嵌套字段路径加上合适的操作符来筛选。你需要指定检查countries数组里每个对象的sys.id是否匹配目标ID,用[in]操作符来实现“包含”的逻辑。

具体的请求URL应该是这样的:

https://cdn.contentful.com/spaces/aoeuaoeuao/entries?content_type=contentPage&fields.countries.sys.id[in]=3S5dbLRGjS2k8QSWqsKK86

这里的[in]操作符会检查countries数组中是否存在任意一个对象的sys.id等于你指定的ID,正好满足你“仅返回包含特定国家的条目”的需求。

.NET API中的实现

如果你后续用Contentful的.NET SDK(比如Contentful.Core),可以这样构建查询:

using Contentful.Core;
using Contentful.Core.Models;
using Contentful.Core.QueryHelpers;

// 初始化客户端
var client = new ContentfulClient(
    "<你的Delivery API密钥>",
    "<你的Space ID>"
);

// 构建查询
var query = new QueryBuilder<ContentPage>()
    .Field("fields.countries.sys.id[in]", "3S5dbLRGjS2k8QSWqsKK86")
    .ContentType("contentPage");

// 获取结果
var response = await client.GetEntriesAsync<ContentPage>(query);

或者用更类型安全的方式(假设你已经生成了对应Content类型的模型类):

var query = new QueryBuilder<ContentPage>()
    .Where(x => x.Countries, QueryOperator.In, "3S5dbLRGjS2k8QSWqsKK86", "sys.id")
    .ContentType("contentPage");

额外说明

你之前在CMS里看到的filters.0.key这类参数是Contentful后台内部使用的查询格式,Delivery API并不支持,所以不用尝试用它来调用公开API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:59