我正在尝试使用firebase来做一个示例应用程序,但我不太明白如何检索嵌套的、受宠若惊的数据。
假设我有一个像这样的数据库
{
"users": {
"user-1": {
"email": "email1",
"matches": [
"match-1",
"match-2"
]
},
"user-2": {
"email": "email2",
"matches": [
"match-1",
"match-2"
]
},
"user-3": {
"email": "email3",
"matches": [
"match-2"
]
}
},
"matches": {
"match-1": {
"name": "Match 1",
"users": [
"user-1",
"user-2"
]
},
"match-2": {
"name": "Match 2",
"users": [
"user-1",
"user-2",
"user-3"
]
}
}
}我想得到所有的用户匹配-1。我现在要做的是观察users.user-1。匹配来获取匹配列表,然后观察每个匹配,所以最后的流程是:
问题是:我如何优化这个流程?(比如创建类似于sql联接的东西)
我的想法是得到这样的东西
{
"users": {
"user-1": {
"email": "email1",
"matches": {
"match-1": {
"name": "Match 1",
"users": [
"user-1",
"user-2"
]
},
"match-2": {
"name": "Match 2",
"users": [
"user-1",
"user-2",
"user-3"
]
}
}
}
}
}所以我可以立刻观察整个结构。
我在iOS上使用firebase,使用的是快速,但可以随时以您喜欢的任何语言进行回复。
谢谢。
发布于 2016-12-07 19:03:36
注释中链接的答案是一个答案,但让我们简化一下。让我们创建一个用户节点来存储用户,并创建一个匹配节点来跟踪他们播放的匹配。
然后,我们将执行一个查询来检索与用户-1匹配的内容:
users
user-1
name: "some name"
email: "somename@thing.com"
user-2
name: "another name"
email: "anothername@thing.com"
user-3
name: "cool name"
email: "coolname@thing.com"然后,匹配节点
matches
match-1
name: "Match 1"
users
user-1: true
user-2: true
match-2
name: "Match 2"
users
user-1: true
user-2: true
user-3: true
match-3
name: "Match 3"
users
user-2: true
user-3: true如您所见,我们已经构造了数据以直接处理我们的查询
matchesRef.queryOrdered(byChild: "users/user-1").queryEqual(toValue: true)
.observe(.value, with: { snapshot in
print(snapshot)
});快照将包含节点匹配-1和匹配-2,但不包含匹配-3。
https://stackoverflow.com/questions/41015445
复制相似问题