如何查询"或"在解析中使用includeKey?

时间:2015-03-31 09:10:21

标签: ios swift parse-platform fetch

所以,我在Parse和Place模型中有事件模型。每个型号都有地方。我也有用户,每个活动都有所有者。 所以,我需要在我的位置周围10英里处举办活动或活动 要使用我的活动

let query = Event.query()
        query.whereKey("author", containedIn: [PFUser.currentUser()!])
        query.includeKey("place")

它有效,但现在我需要添加OR操作并在10英里内查找事件 我用

    let placeQuery = PFQuery(className: "Place")
    placeQuery.whereKey("location", nearGeoPoint: PFGeoPoint(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude), withinMiles: 20.0)

我需要如何让主查询使用其中两个? 我试过了

 var resultQuery:PFQuery = PFQuery.orQueryWithSubqueries([query, placeQuery])

但它给了我一个错误,orQueryWithSubqueries需要使用相同的类

1 个答案:

答案 0 :(得分:2)

目前你有一个返回事件列表的查询,然后是一个返回一个地方列表的查询。

这就是你收到错误的原因。

他们都需要返回相同的类型。然后你可以将它们“或”在一起。

喜欢这个......

let authorQuery = Event.query()
authorQuery.whereKey("author", containedIn: [PFUser.currentUser()!])

// note I'm using the "place.location" path to refer to the location key of the place key. 
let placeQuery = Event.query()
placeQuery.whereKey("place.location", nearGeoPoint: geoPoint, withinMiles: 20.0)

只有这样才能在复合查询中包含键。在子查询中使用时,Include键没有效果。

let resultQuery:PFQuery = PFQuery.orQueryWithSubqueries([authorQuery, placeQuery])
resultQuery.includeKey("place")

现在将返回一个事件列表,并在每个对象中填充Place键。

修改

进一步阅读Parse Docs表明复合查询不支持各种各样的事情......

enter image description here

  

请注意,我们不支持复合查询的子查询中的GeoPoint或非过滤约束(例如,nearGeoPoint,在GeoBox ...中,limit,skip,orderBy ...:,includeKey :)。 / p>

看起来您将不得不为此创建云功能。

使用云功能,您可以传入该位置并运行两个单独的查询,然后在返回之前将它们组合到now数组中。

你必须使用Cloud Code的东西在Javascript中写这个。

编辑2

实际上,你可以试试这个......

let authorQuery = Event.query()
authorQuery.whereKey("author", containedIn: [PFUser.currentUser()!])

// note I'm using the "place.location" path to refer to the location key of the place key. 
let placeQuery = Place.query()
placeQuery.whereKey("location", nearGeoPoint: geoPoint, withinMiles: 20.0)

let eventPlaceQuery = Event.query()
eventPlaceQuery.whereKey("place", matchesQuery: placeQuery)

let resultQuery:PFQuery = PFQuery.orQueryWithSubqueries([authorQuery, eventPlaceQuery])
resultQuery.includeKey("place")

这可能有相同的限制,不允许你创建它,但它值得一试。 :d