k00k
k00k

Reputation: 17573

Freebase MQL - Don't show parent object if a value in array element is present?

Trying to get some movies and their genres but leave out any records that contain the genre "Thriller" in the array of genres.

How do I not only ignore the genre key itself for "Thriller", but squelch that entire movie result? With my current query, Thriller is removed from the array of genres, but the parent object (film) is still displayed.

Here's my current workup in the query editor: http://tinyurl.com/d2g54lj

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

Upvotes: 1

Views: 148

Answers (2)

Tom Morris
Tom Morris

Reputation: 10540

The answer provided is correct, but changes some other stuff in the query too. Here's the direct equivalent to the original query:

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

The important part is the "optional":"forbidden". The default property used is "name", but we need to specify it explicitly when we use a subclause (to allow us to specify the "optional" keyword). Using ids instead of names, as @kook did, is actually more reliable, so that's an improvement, but I wanted people to be able to see the minimum necessary to fix the broken query.

We can abbreviate the property name to "genre" from "/film/film/genre" since "type":"/film/film" is included (we also never need to use /type/object for properties like /type/object/name).

Upvotes: 1

k00k
k00k

Reputation: 17573

Answering my own question.

So the trick is to not use the != (but not) operator, but to actually flip it on its head and use the "|=" (one of) operator with 'forbid', like so:

[{
  '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"
  }
}]​

Thanks to the following post:

Freebase query - exclusion of certain values

Upvotes: 0

Related Questions