Firebase Realtime Database(Swift):如何仅加载近30天评论?
解决Firebase Realtime Database加载近30天评论的问题
核心思路
iOS端Firebase Realtime Database的queryStarting(atValue:)就是对应Android的whereGreaterThan方法,你只需要正确计算30天前的时间戳,然后以此为起点查询所有时间戳晚于该值的评论即可。
修正后的代码
func loadData() { activityIndicatorView.startAnimating() guard let placeIdFromSearch = ViewController.placeidUebertragen else { activityIndicatorView.stopAnimating() return } // 计算30天前的时间戳(单位:秒,与timeIntervalSince1970一致) let thirtyDaysInSeconds: TimeInterval = 30 * 24 * 60 * 60 let thirtyDaysAgo = Date().timeIntervalSince1970 - thirtyDaysInSeconds let thirtyDaysAgoTimestamp = Int(thirtyDaysAgo) // 构建查询:按userTime排序,只加载时间戳大于等于30天前的评论 let query = Database.database().reference() .child("placeID/\(placeIdFromSearch)") .queryOrdered(byChild: "userTime") .queryStarting(atValue: thirtyDaysAgoTimestamp) query.observe(.childAdded) { [weak self] snapshot in guard let self = self else { return } guard let dic = snapshot.value as? [String: Any] else { return } let newPost = importPosts(dictionary: dic, key: snapshot.key) guard let userUid = newPost.userID else { return } self.fetchUser(uid: userUid) { self.table.insert(newPost, at: 0) self.activityIndicatorView.stopAnimating() self.tableView.reloadData() } } } func fetchUser(uid: String, completed: @escaping () -> Void) { Database.database().reference() .child("user") .child(uid) .child("userInformation") .observeSingleEvent(of: .value) { snapshot in // 建议用单次监听避免重复插入数据 guard let dic = snapshot.value as? [String: Any] else { completed() return } let newUser = UserModel(dictionary: dic) self.users.insert(newUser, at: 0) completed() } }
关键说明
- 时间戳计算:
30 * 24 * 60 * 60是30天对应的秒数,用当前时间戳减去这个值得到30天前的时间点,以此作为查询起点,确保只加载近30天的评论。 - 查询对象类型:
queryOrdered(byChild:)返回的是DatabaseQuery,无需强制转换为DatabaseReference,直接调用observe即可。 - 监听优化:
fetchUser中改用observeSingleEvent(of: .value),避免用户信息变化时重复插入数据到数组中。 - 单位一致性:确保数据库中
userTime字段的时间戳是秒级(和timeIntervalSince1970单位一致),如果数据库存的是毫秒级时间戳,需要将thirtyDaysAgoTimestamp乘以1000再传入queryStarting(atValue:)。
内容的提问来源于stack exchange,提问作者submariner
相关产品推荐
相关产品推荐

