Freebase MQL - 如果数组元素中存在值,则不显示父对象?

时间:2011-12-03 05:03:40

标签: freebase mql

试图获取一些电影及其类型,但遗漏任何包含类型“Thriller”类型的记录。

我如何不仅忽略“Thriller”的流派键本身,而且还压制整个电影结果?使用我当前的查询,Thriller将从类型数组中删除,但仍会显示父对象(电影)。

这是我在查询编辑器中的当前工作: http://tinyurl.com/d2g54lj

[{
  'type':'/film/film',
  'limit':5,
  'name':null,
  '/film/film/genre': [],
  '/film/film/genre!=': "Thriller",
}]​

2 个答案:

答案 0 :(得分:1)

提供的答案是正确的,但也会更改查询中的其他内容。这是直接等效于原始查询:

[{
  "type":          "/film/film",
  "limit":         5,
  "name":          null,
  "genre": [],
  "x:genre": {"name":"Thriller",
              "optional":"forbidden"},
}]​

重要的部分是“可选”:“禁止”。使用的默认属性是“name”,但我们需要在使用子条款时明确指定它(允许我们指定“optional”关键字)。正如@kook所做的那样,使用id代替名称实际上更可靠,因此这是一种改进,但我希望人们能够看到修复损坏查询所需的最低限度。

我们可以将属性名称从“/ film / film / genre”缩写为“genre”,因为“type”:“/ film / film”包含在内(我们也不需要使用/ type / object作为/的属性)类型/对象/名称)。

答案 1 :(得分:0)

回答我自己的问题。

所以诀窍是使用!=(但不是)运算符,但要真正翻转它并使用" | =" (其中一个)运营商使用'禁止',如下:

[{
  'type':'/film/film',
  'limit':5,
  'name':null,
  '/film/film/genre': [{
    "id":       null,
    "optional": true
    }],
  "forbid:/film/film/genre": {
    "id|=": [
      "/en/thriller",
      "/en/slapstick"
    ],
    "optional": "forbidden"
  }
}]​

感谢以下帖子:

Freebase query - exclusion of certain values