繁体   English   中英

使用Parse.com,如何查询包含时间增量(在最近3分钟内处于活动状态)的对象?

[英]Using Parse.com, how can I query for objects containing a time delta (active within last 3 minutes)?

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

首选iOS示例。

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

  1. 创建具有两个字段的对象类OnlineInfo。 一个字段是指向User对象的指针,另一个字段是其中带有Date的'lastOnline'字段。

像这样存储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分钟发送一次以上。

这是一种实现方法:

// 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数据库进行交互或通过数据库中的关系进行交互的用户时才有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM