如何更新Freebase中的非唯一属性?

时间:2013-09-03 00:17:18

标签: freebase mqlwrite

我一直在研究calorie counter,我正在慢慢地在MQL写作上取得进展。我目前遇到的问题是更新/common/topic/description属性中的配方本身。

我目前使用的查询是:

[{
  id: recipeId, // previously retrieved
  '/common/topic/description': {
    connect: 'replace',
    value: $('#description textarea').val(),
    lang: '/lang/en'
  }
}]

这成功执行,但是当我queryanother)运行后我收到错误:

{
  "domain": "global",
  "reason": "invalid",
  "message": "Unique query may have at most one result. Got 2",
  "locationType": "other",
  "location": "/common/topic/description"
}

根据the documentationconnect: replace会对唯一属性进行更新,并对非唯一属性进行插入。我是否因为插入了一个值而得到了它?

是否有必要删除其他值以防止出错?我是否需要知道现有值才能将其删除?

{
  id: recipeId,
  '/common/topic/description': {
    connect: 'delete',
    value: 'Value currently stored',
    lang: '/lang/en'
  }
}

1 个答案:

答案 0 :(得分:1)

问题与更新非唯一属性无关。您的阅读查询是个问题。您没有引用失败的查询,但是"location": "/common/topic/description"的错误消息部分是您的提示。该主题有两个描述,一个是空的,一个不是,但是在查询中没有使用数组表示法。

这将有效:

[{
  "id": "/m/0wh83sg",
  "/food/recipe/ingredients": [{
    "id": null,
    "ingredient": {
      "id": null,
      "name": null,
      "/food/food/energy": null,
      "/common/topic/image": {
        "id": null,
        "optional": true,
        "limit": 1
      },
      "optional": true
    },
    "unit": {
      "id": null,
      "name": null,
      "optional": true
    },
    "quantity": null,
    "notes": null
  }],
  "/common/topic/description": [{}]
}]