【问题标题】:Contentful API query for array数组的内容 API 查询
【发布时间】:2015-12-19 17:49:23
【问题描述】:

我正在尝试通过Contentful API (npm module of the content delivery) 做某事,但我不确定是否可行。

我在 Contentful 中有一个内容类型 tag,它有 1 个字段,也称为 tag。然后我有另一个名为article 的内容类型,它有一个名为tags 的多引用字段。该字段允许编辑将多个标签条目链接到文章。

现在当用户加载文章时,我想通过使用标签来查找具有相同标签的其他文章来显示相似的阅读。

因此一篇文章的相关 JSON 结构如下所示:

{
  sys: {...},
  fields: {
    tags: [
      {
        sys: {...},
        fields: { tag: "Football" }
      },
      {
        sys: {...},
        fields: { tag: "Leeds United" }
      },
      {
        sys: {...},
        fields: { tag: "Elland Road" }
      }
    ]
  }
}

假设用户正在阅读的文章具有标签footballLeeds UnitedElland Road。我将如何使用 API 返回带有这 3 个标签或其中一些标签的其他文章。例如,具有所有 3 个标签的文章将是强匹配,但只有 1 个匹配标签的文章将是弱匹配。

我尝试像这样使用包含规则:

contentClient.entries({
  "content_type": "xxxxxxxx",
  "fields.tags[in]": ["football", "Leeds United"],
}, function(err, entries){
  if (err) throw err;
  console.log(entries);
});

这当然行不通,因为值 in 的字段不是fields.tags[in],而是fields.tags.fields.tag

【问题讨论】:

    标签: javascript json node.js api contentful


    【解决方案1】:
    client.getEntries({
      content_type: '<content_type_id>',
      'fields.<field_name>[in]': 'accessories,flowers'
    })
    

    根据文档,注意'accessories,flowers'之间的逗号后没有空格

    【讨论】:

      【解决方案2】:

      您可以通过确定标签的sys.id 来实现包含查询,然后对它们进行查询,方法是将您的字典更改为:

      {
        "content_type": "xxxxxxxx",
        "fields.tags.sys.id[in]": "tagId1, tagId2",
      }
      

      内容交付模块不编组数组,因此参数需要是逗号分隔的字符串。 Content Delivery API 不支持评分,因此使用该查询您只会获得所有条目的列表,这些条目具有指向这些标签中的一个或多个的链接,但不会以任何方式按强/弱匹配进行排序。

      【讨论】:

      • 谢谢!!!!我一直在尝试这样做 2 天。他们的文档是错误的! github.com/contentful/contentful.js 他们告诉你在那里使用数组。
      • 你能为这个@NeoNacho指定一个等效的http请求吗
      • 这太完美了!太感谢了!我一直忘记你所做的每一个条目都与它们各自的sys.id相关联。
      猜你喜欢
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2021-05-07
      • 2017-11-17
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多