如何在 Parse 中执行 "not in" 查询
How to do a "not in" query in Parse
我正在 Swift 中构建一种热门或非热门风格的应用程序,用户可以在其中投票:分别对图像进行热门、非热门和可能的投票。
用户每次访问图像时,他们都会通过点击 IBAction 进行投票,这会触发一个查询,显示来自 Parse 的总票数和总热点结果,如下面的代码所示。
我计划有 1,000 张图片。
我可以预加载与每个图像相对应的一些 objectID,然后当用户对图像投票时,数据已经 preloaded/queried 解析了吗?我该怎么做?有人在我之前的问题中建议在 Parse 中使用 NOT IN 查询。我如何在 Parse 中执行 NOT IN 查询,我将如何去做?
现在,我正在为每个 ObjectID 编写一个查询,这将从 1000 个不同的图像中获取 1000 个查询...显然不可扩展。
更多代码解释:
swipePosition 变量只是一个计数器,用于计算用户所在的图像。正在存储的图像在数组中,现在存储在 Xcode 上。如果它们存储在 Parse 上,也许它们也可以预加载?
(我只展示了 "hotButtonQuery" 函数,但还有一个 Not 和 Maybe buttonQuery 函数。)
有没有办法简化此代码以使其具有可扩展性?因为,截至目前,我无法扩展超过 25 张图像。
func hotButtonQuery() {
if swipePosition == 0 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("RlvK3GhfqE") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
} else if swipePosition == 1 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("30WlVtgurP") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
//println(userData.objectForKey("totalVotes"))
//println("total HOTs:")
//println(userData.objectForKey("hot"))
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
} else if swipePosition == 3 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("5D6ARjk3xS") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
//println(userData.objectForKey("totalVotes"))
//println("total HOTs:")
//println(userData.objectForKey("hot"))
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
}
不在的例子:
var query = PFUser.query()
if (friendsFilter){
var friendsRelation:PFRelation = PFUser.currentUser().relationForKey("friendsRelation")
query = friendsRelation.query()
}
else{
var friendsRelation:PFRelation = PFUser.currentUser().relationForKey("friendsRelation")
var innerQuery = friendsRelation.query()
query = PFUser.query()
query.whereKey("username", doesNotMatchKey: "username", inQuery: innerQuery)
只需使用
query.whereKey("key", doesNotMatchKey: "matchcheck", inQuery: innerQuery)
我正在 Swift 中构建一种热门或非热门风格的应用程序,用户可以在其中投票:分别对图像进行热门、非热门和可能的投票。
用户每次访问图像时,他们都会通过点击 IBAction 进行投票,这会触发一个查询,显示来自 Parse 的总票数和总热点结果,如下面的代码所示。
我计划有 1,000 张图片。
我可以预加载与每个图像相对应的一些 objectID,然后当用户对图像投票时,数据已经 preloaded/queried 解析了吗?我该怎么做?有人在我之前的问题中建议在 Parse 中使用 NOT IN 查询。我如何在 Parse 中执行 NOT IN 查询,我将如何去做?
现在,我正在为每个 ObjectID 编写一个查询,这将从 1000 个不同的图像中获取 1000 个查询...显然不可扩展。
更多代码解释:
swipePosition 变量只是一个计数器,用于计算用户所在的图像。正在存储的图像在数组中,现在存储在 Xcode 上。如果它们存储在 Parse 上,也许它们也可以预加载?
(我只展示了 "hotButtonQuery" 函数,但还有一个 Not 和 Maybe buttonQuery 函数。)
有没有办法简化此代码以使其具有可扩展性?因为,截至目前,我无法扩展超过 25 张图像。
func hotButtonQuery() {
if swipePosition == 0 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("RlvK3GhfqE") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
} else if swipePosition == 1 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("30WlVtgurP") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
//println(userData.objectForKey("totalVotes"))
//println("total HOTs:")
//println(userData.objectForKey("hot"))
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
} else if swipePosition == 3 {
var query = PFQuery(className:"UserData")
query.getObjectInBackgroundWithId("5D6ARjk3xS") {
(userData: PFObject!, error: NSError!) -> Void in
if error != nil {
println(error)
}
else {
userData.incrementKey("totalVotes", byAmount: 1)
userData.incrementKey("hot", byAmount: 1)
var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger
var updateHotsUILabel = userData.objectForKey("hot") as NSInteger
//println(userData.objectForKey("totalVotes"))
//println("total HOTs:")
//println(userData.objectForKey("hot"))
userData.saveInBackground()
println("parse was updated!")
self.totalVotesLabel.text = String(updateTotalVotesUILabel)
self.totalHotsLabel.text = String(updateHotsUILabel)
}
}
}
不在的例子:
var query = PFUser.query()
if (friendsFilter){
var friendsRelation:PFRelation = PFUser.currentUser().relationForKey("friendsRelation")
query = friendsRelation.query()
}
else{
var friendsRelation:PFRelation = PFUser.currentUser().relationForKey("friendsRelation")
var innerQuery = friendsRelation.query()
query = PFUser.query()
query.whereKey("username", doesNotMatchKey: "username", inQuery: innerQuery)
只需使用
query.whereKey("key", doesNotMatchKey: "matchcheck", inQuery: innerQuery)