我正在使用 Firebase 和 Swift 构建社交网络应用程序。我有一些用户对其他用户有一些关注。我想为这个用户解析一个提要,其中只包含他的关注者列表中的帖子。我的数据库如下所示:
"posts": {
"postA": {
"title": "Title for post A"
"byUser": "userABC"
}
}
"postB": {
"title": "Title for post B"
"byUser": "userCBA"
}
}
"postC": {
"title": "Title for post C"
"byUser": "userBCA"
}
}
"postD": {
"title": "Title for post D"
"byUser": "userBCD"
}
}
}
"users": {
"userABC": {
"name": "John"
"following": {
"userCBA": "true"
"userBCA": "true"
}
}
"userCBA": {...}
"userBCA": {...}
"userBCD": {...}
}
所以我们的想法是显示过滤后的帖子 userABC
对于他的以下列表( postB
和 postC
)。我应该提出什么 Firebase 请求?
P.S.:我唯一的想法是为每个用户发出几个 firebase 请求以下载他们的帖子,然后将这些请求附加到一个数组中,然后按时间戳对数组对象进行排序。但想象一下,成千上万的追随者,每个人都有一千个帖子。这将是一场灾难。
P.P.S.:我无法通过 Firebase“安全与规则”来调整结果,因为我想在搜索中显示所有用户的所有帖子。
非常感谢!
最佳答案
在 NoSQL 中,您通常会按照应用程序使用数据的方式对数据进行建模。由于您想向用户显示他们关注的人的帖子的提要/墙,请在您的数据库中对其进行建模:
"user_walls": {
"userABC": {
"KeyOfPost1FromUserCDA": true
"KeyOfPost2FromUserBCA": true
"KeyOfPost3FromUserCDA": true
},
"userBCA": {
"KeyOfPost1FromUserCDA": true
"KeyOfPost3FromUserCDA": true
"KeyOfPost4FromUserABC": true
},
etc
}
这里我们只存储帖子的键,但您还可以存储更多信息,而不仅仅是 true
。这是一个称为反规范化的过程。
对于这个和更多相关的建议,我推荐这个 article on NoSQL Data Modeling .
有关以这种方式对其数据建模的出色示例应用程序,请参阅 FireFeed:https://firefeed.io/ .
关于ios - 通过 Swift 中一个键的多个值过滤 Firebase 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35418755/