gpt4 book ai didi

swift - 如果您有一个 firebase 快照,其中过滤器应用于当前用户的 child ,那么如何对数据库中的所有用户执行此操作?

转载 作者:行者123 更新时间:2023-12-04 04:05:20 24 4
gpt4 key购买 nike

如果您有一个为当前用户过滤的 Firebase 快照,您如何为数据库中的所有用户执行此操作?

 Path: (people.child(uid).child(peopleWhoLike2)  

它适用于当前用户,但我希望它适用于所有用户。可能类似于 snapshot.children.allObjects 中的 peopleArray 一样! [DataSnapshot] { 需要使用。以下是当前的代码

        let thisUserRef1 = Database.database().reference().child("people").child(uid)
let myPeopleRef1 = thisUserRef1.child("peopleWhoLike2")
myPeopleRef1.observeSingleEvent(of:DataEventType.value, with: { snapshot in
print("klk")

let peopleArray = snapshot.children.allObjects as! [DataSnapshot]
let filteredResults = peopleArray.filter { person in
let personUid = person.value as! Int
let coordSnap12 = personUid


print("kjk", coordSnap12 )
let date = Date(timeIntervalSince1970: TimeInterval(coordSnap12)/1000.0)
//let secondsInDay = 86400

return Calendar.current.isDateInToday(date)

}


print(filteredResults, "ppp")
let countb = filteredResults.compactMap({$0}).count
print(countb, "ccc")

JSON 数据库结构

"people" : {
"1ZWT7FAE2qThNQfBj7tbMO7BnMo1" : {
"Coordinates" : {
"latitude" : 50.054738,
"longitude" : 8.226809826085624
"peopleWhoLike2" : {
"1vLVFwrXrHUoakmDrnQKwbv08Yj1" : 1581548952597,
"F9NX0UCG4fVHCKFk2VZ1NZKsLro2" : 1586210112155,
"IrrBgFY9C1ekMmHUkQRzc5LhbDu1" : 1581547417432,

最佳答案

如果不读取节点数据,Firebase 实时数据库无法直接获取节点中子节点的数量。所以有两种方法。

  1. 观察节点,使用 .childAdded 遍历子节点以获得计数。或者,沿着相同的路线加载所有具有 .value 的子项 - 您可以获得快照子项的计数。缺点是它可能有大量数据,因此不鼓励使用更大的数据集或未知数量的 child 。显然,它的读取量也很大,就好像您有 1000 个用户一样,需要解析大量数据。

  2. 保留子计数的单独节点(这是赢家!)

附加节点看起来像这样

like_me_counts
"1ZWT7FAE2qThNQfBj7tbMO7BnMo1": 3
"another user id": 20
"yet another user id": 12

因此,当用户有另一个喜欢他们的人时,将“喜欢者”添加到“peopleWhoLike2”节点,如您的问题所示,然后在 like_me_counts 节点中增加该用户匹配节点。

在这种情况下,如果另一个人喜欢用户 1ZWT7... 从 like_me_counts 节点读取它以获得值 3,加一然后写出 4。如果用户不喜欢他们,读入它,减去 1 和写出新值。

您可以将所有这些包装到一个事务中,这样它要么全部成功,要么全部失败。

编辑

我什至会说最好把喜欢你的人分成自己的节点

like_me
uid_0
user_10: true
user_11: true
uid_1
user_39: true
uid_2
user_46: true

那个结构是什么,每个用户都会在他们的 like_me 节点上添加一个 child 添加的观察者,当有人喜欢他们时......说 user_52 喜欢 user_2

   uid_2
user_46: true
user_52: true

然后 uid_2 将收到该通知并可以处理它。显然,我只是将 true 用作占位符,但可能还有其他信息,例如时间戳甚至可用于过滤的子节点(例如,今天的喜欢)

  uid_2
user_46: 20200624
user_52: 20200629

关于swift - 如果您有一个 firebase 快照,其中过滤器应用于当前用户的 child ,那么如何对数据库中的所有用户执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62596070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com