Freebase MQL - не показывать родительский объект, если присутствует значение в элементе массива? - PullRequest
1 голос
/ 03 декабря 2011

Попытка получить некоторые фильмы и их жанры, но пропустить все записи, которые содержат жанр "Триллер" в массиве жанров.

Как мне не только игнорировать сам ключ жанра для "Триллера", но и подавить весь этот фильм? В моем текущем запросе триллер удален из массива жанров, но родительский объект (фильм) все еще отображается.

Вот моя текущая работа в редакторе запросов: http://tinyurl.com/d2g54lj

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

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Ответ правильный, но также изменяет некоторые другие элементы запроса. Вот прямой эквивалент исходного запроса:

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

Важной частью является «необязательно»: «запрещено». Используемым по умолчанию свойством является «имя», но нам нужно явно указать его, когда мы используем подпункт (чтобы мы могли указать ключевое слово «необязательный»). Использование идентификаторов вместо имен, как это сделал @kook, на самом деле более надежно, так что это улучшение, но я хотел, чтобы люди могли видеть минимум, необходимый для исправления некорректного запроса.

Мы можем сокращать имя свойства до «жанра» из «/ film / film / genre», поскольку включено «type»: «/ film / film» (нам также никогда не нужно использовать / type / object для таких свойств, как / Тип / объект / название).

0 голосов
/ 03 декабря 2011

Отвечая на мой собственный вопрос.

Так что хитрость в том, чтобы не использовать оператор != (но не), а просто перевернуть его с ног на голову и использовать "|= "(один из) оператор с 'запретить', например так:

[{
  '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 - исключение определенных значений

...