所以,我在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需要使用相同的类
答案 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表明复合查询不支持各种各样的事情......
请注意,我们不支持复合查询的子查询中的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