如何从存储在 Parse 列中的数组中删除对象

Posted

技术标签:

【中文标题】如何从存储在 Parse 列中的数组中删除对象【英文标题】:How to delete objects from an array stored in Parse column 【发布时间】:2015-08-12 13:46:54 【问题描述】:

所以,我在 Parse.com 中创建了一个名为 Posts 的类。这是类 Posts 的图像

在这里您可以在objectId 列中看到所有Posts 的objectId,在likes 列中我正在保存喜欢该帖子的用户的ObjectId.. 所以基本上如果用户点击与按钮不同,当前用户的 ID 应该被删除。这是我当前的代码:

 var query:PFQuery = PFQuery(className: "Posts")
 query.whereKey("objectId", equalTo: postData.objectId!)
 query.whereKey("likes", equalTo: PFUser.currentUser()!.objectId!)
 query.findObjectsInBackgroundWithBlock( (objects, error) -> Void in

  if let objects = objects 

   for object in objects 

    object.deleteInBackground()

    

    
 )

但它会删除整行而不是当前用户的用户ID..

【问题讨论】:

考虑关系是否更适合此要求 【参考方案1】:

您可以使用removeObject:forKey: 仅从数组中删除该单个对象。完成此操作后,调用saveInBackground 将更改保存回服务器。

另请参阅:https://www.parse.com/docs/ios/guide#objects-arrays

【讨论】:

【参考方案2】:

我相信您将 userID 作为字符串而不是指针存储在您的 likes 数组中。

在您的代码中,键“likes”是一个数组类型,但是您要查询一个字符串类型的objectId,显然解析不会找到任何与此查询匹配的列。

所以在你的情况下,你想删除你喜欢数组中的一个字符串(目标 c 代码)

PFQuery *query = [PFQuery queryWithClassName@"Posts"];
[query whereKey:@"objectId" equalTo:postData.objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *object, NSError *error)
     
         if (! error)
         
             //get the post object, index 0 because each post has 1 unique ID
             PFObject *thisObject = [object objectAtIndex:0];
             //get the likes array
             NSMutableArray *array = [[NSMutableArray alloc]initWithArray:thisObject[@"likes"]];
             [array removeObject:/* your user id*/];
             //save the new array
             [thisObject setObject:array forKey:@"likes"];
             [thisObject saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
                 if (succeeded)
                 
                     //success
                 
             ];
         
     ];

【讨论】:

【参考方案3】:

我已经使用您的方法从另一个用户的朋友列表中删除了用户 objectID,而是将其添加到用户阻止的朋友列表中,两者都在解析时的数组中。谢谢

let cell = tableView.cellForRow(at: indexPath) as! cell

let theUsersID = cell.theObjectID.text!

PFUser.current()?.addUniqueObjects(from: [theUsersID], forKey: "friendList")
PFUser.current()?.saveInBackground()

 PFUser.current()?.removeObjects(in: [theUsersID], forKey: "blockFriend")
PFUser.current()?.saveInBackground()


self.usernames.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)

【讨论】:

以上是关于如何从存储在 Parse 列中的数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

我想用 Sequelize 将 MySQL 中的对象数组存储在单个列中

使用 Parse Cloud Code 从数组中删除对象

从 ionic2 本地存储中删除数组

如何从结构类型数组的列中删除特定元素

如何从 Parse.com 检索数组

从 JSONB 列中的多个数组中过滤掉对象