我想过滤 Firebase
中的数据 . 我收到了一些疑问,但我无法按照我的要求过滤数据 .
Data :
{
"messages": {
"Data_1": {
"Inner_3": {
"Text": {
"-Kqgd2_QSi5HIlyH6Om3": {
"date": 1501840029764,
"text": "hi"
},
"-Kqgd6zZf51AdKNPrsX8": {
"date": 1501840047829,
"text": "hello"
}
}
}
},
"Data_2": {
"Inner_2": {
"Text": {
"-Kqm5GijxFT54wZRHIJj": {
"date": 1.501931572192E9,
"text": "hi"
},
"-Kqm5YohOG1cFWO-WNGc": {
"date": 1.501931646257E9,
"text": "test"
},
"-Kqm6935IY8Ddj20Z3TN": {
"date": 1.501931802871E9,
"text": "new message"
}
}
}
}
}
}
在上面的json中,如果我传递 Inner_3
那么它应该返回到下面的结果 . 它检查所有 arrays
如果 Inner_3
可用,那么从 Inner_3
给我一个主图层名称和最后 TEXT
.
{
"messages": {
"Data_1": {
"Text": {
"-Kqgd6zZf51AdKNPrsX8": {
"date": 1501840047829,
"text": "hello"
}
}
}
}
}
请帮我实现这个结果 .
2 回答
遗憾的是,Firebase数据库无法进行此类查询 . 您必须更改数据结构以适应它 .
一种方法是将
Inner_3
添加为已知属性的值:现在您可以查询:
或者,您可以添加单独的查找列表:
然后,您可以通过直接查找找到
Inner_3
项的路径:从中可以直接访问节点(无需查询) .
必须调整/扩展您的数据结构以允许您在应用程序中使用的用例在Firebase和其他NoSQL数据库中非常常见 . 既然您对NoSQL看起来比较新,我建议您阅读NoSQL data modeling
您必须通过密钥.orderByKey()进行排序,并获取lastone,rember firebase push keys ar随机字符串,其中包含时间戳 .
最常见的排序方法是ref.orderByKey() . 它通过键来命令ref的孩子,通常按键 - 按时间顺序排列 .
按键排序快照后,您可以执行以下操作: