使用Parse.com,如何查询包含时间增量的对象(在最近3分钟内有效)?

时间:2015-03-30 20:33:22

标签: ios date swift parse-platform

我正在尝试构建一个Parse查询,该查询将在最后3分钟内检索最新的活动用户。无论是使用PFCloud还是仅使用简单的Parse查询,我该如何实现?

首选iOS示例。

2 个答案:

答案 0 :(得分:0)

最简单的方法是拥有一个虚拟字段,每次用户处于活动状态时都会更新。遗憾的是,您不能将此字段放在与用户关联的InstallationUser对象上,因为这些字段受到保护 - 除非您使用PFCloud调用来处理它。但是,云代码调用很昂贵,如果你要经常运行这个调用,我建议使用第二个不受保护的Object类,你可以正常查询。

  1. 使用两个字段创建一个对象类OnlineInfo。一个字段是指向User对象的指针,另一个字段是一个“lastOnline”字段,其中包含Date。
  2. 像这样存储ping:

    - (void)updateLastOnline
    {
      PFQuery *query = [PFQuery queryWithClassName:@"OnlineInfo"];
      //Store the objectID for the associated OnlineInfo object as a pointer field "onlineInfo" on the User object
      [query getObjectInBackgroundWithId:[[PFUser currentUser] objectForKey"onlineInfo"] block:^(PFObject *onlineInfo, NSError *error) {
        // Do something with the returned PFObject in the gameScore variable.
        [onlineInfo setObject:[NSDate date] forKey:@"lastOnline"];
        [onlineInfo saveInBackground];
      }];
    }
    

    然后你可以使用带有两个日期的标准PFQuery来查询这个'安全'对象,你可以在我的帖子中找到它: PFQuery by date

    注意:您可能还需要确保每隔x分钟调用一次,以防止针对您的Parse安装发送此垃圾邮件。您可以免费获得30个请求/秒,因此您可能不希望每分钟或每5分钟发送一次以上。

答案 1 :(得分:0)

这是一种方法:

// Set a date variable equal to 3 minutes ago
var date = NSDate()
var threeMinutesAgo = date.dateByAddingTimeInterval(-180)
// I'm using the updatedAt column in a User class
let query = PFQuery(className: "_User")
query.whereKey("updatedAt", greaterThanOrEqualTo: threeMinutesAgo)    
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
    if error == nil && objects.count > 0 {
        // Do something with queried objects ... 
    } else {
        // Some error handling ...
    }
}

请注意,只有当您的定义中的“活跃用户”是与Parse数据库或数据库中的关系进行交互的用户时,此方法才有效。