【发布时间】:2016-05-05 14:59:22
【问题描述】:
在我的 React-Native 应用程序中,我有一组特定用户,我想从 Firebase 中提取他们的值。解决此问题的最有效方法是什么?目前我正在遍历数组并为每个数组发出一个新请求(下面的相关代码):
const usersRef = new Firebase(`${ config.FIREBASE_ROOT }/users`)
for (var key in usersArray) {
var userRef = usersRef.child(key);
//do stuff here
}
但是,我觉得这不是很有效,它会向数据库发出多个请求。有没有一种方法可以在一次调用中传入数组并从 Firebase 获取这些项目?谢谢。
Firebase 数据结构:
{
"items" : [ {
"description" : "fuzzy socks",
"type" : "toy"
}, {
"description" : "bouncy ball",
"type" : "toy"
}, {
"description" : "scrabble",
"type" : "game"
}, {
"description" : "construction paper",
"type" : "crafts"
} ],
"users" : [ {
"itemList" : [ 1, 2, 3, 4 ],
"description" : "brown",
}, {
"itemList" : [ 5, 6, 7 ],
"description" : "green",
}, {
"itemList" : [ 8, 9, 10 ],
"description" : "blue",
}, {
"itemList" : [ 11, 12, 13 ],
"description" : "yellow",
} ]
}
简化用例:在一个用例中,我只想获取有关 2 个用户的信息(在我存储在 Firebase 中的所有用户中——假设它不仅仅是上面结构中的 4 个)。所以,我有数组importantUsers:
var importantUsers = [0, 3]
然后,我想向 Firebase 发送一个请求,该请求仅在数据库中查询与这些 userID 值关联的值(因此以某种方式将数组传递给 Firebase 以获得结果)。返回值是这样的:
0: itemList: [1,2,3,4], description: brown
3: itemList: [11,12,13], description: yellow
我一次查询多个用户的数据库(而不是为用户 0 和用户 3 创建单独的引用)的动机是不要多次调用 Firebase。有没有办法解决这个问题?
【问题讨论】:
-
你能发布你的 Firebase 数据结构吗?请以文字形式发布(无图片)。可以从您的 Firebase 仪表板->导出按钮获取文本。
-
@Jay 刚刚更新了这个。
-
当您说“具有价值观的特定用户的数组”时,是什么将他们定义为用户,是什么让他们变得具体以及您对什么价值感兴趣?在您的 Firebase 结构中,有一个 users 节点,然后是一个字典数组,其中包含 itemList(这是一个数组)和描述的键值对,它们都不是用户。您是否在问如何访问用户节点中的数组内的特定项目列表?
-
啊,不,所以在我的情况下,我只关心为特定的用户子集(例如,id 为 0 和 1 的用户)提取数据。所以我有一个数组 [0,1],我只想在一个查询中获取该信息。我猜类似于 SELECT * FROM "users" WHERE user_id= (items in array)。我怎样才能得到这个结果?
-
去吧。因此,这种结构不会发生这种情况。首先,一般来说,数组是邪恶的。它们非常难以使用,因为您无法访问数组中的特定元素,除非您知道路径,否则查询它们充其量是具有挑战性的。第二件事是将用户 ID 存储为数值可能会出现问题。从长远来看,利用用户 uid 将使其工作得更好。最后一件事是 AND 查询在 Firebase 中不直接可用。您是否要检索 userId 为 9 的节点,在这种情况下为蓝色节点?
标签: ios database performance firebase react-native