我正在写一个Firebase Cloud Function
这是从一个调用的Android
应用程序。该函数应该从用户节点中获取一个随机用户Database
(任何随机用户,但不是发送请求的用户)并将其返回给客户端。问题在于数据不是以数组的形式构造的(而且它不应该也不可能是)。
所以我不能选择一个随机数并读取该节点,我也不想读取所有用户节点并迭代它,因为它包含很多用户,这会消耗时间和资源。问题:
如何获得与发送请求的用户不同的随机用户,并且每次调用该函数时都会发生变化(完全随机),同时不从数据库查询大量数据?
主要问题:
Firebase 不会跟踪我们进行随机化所需的子项计数。然而我们可以使用DataSnapshot.numChildren()
.
为了避免这种情况,您可以添加一个count
元素到/users
节点,您必须使用云功能手动维护该节点(例如,在添加用户时,增量count
,并在删除时递减)。
另一方面,由于云功能在服务器上,firebase会为你管理缓存,所以实际使用起来并没有什么大不了的DataSnapshot.numChildren()
,因为函数第一次执行后数据就会被缓存,只有当有变化时才会更新。
因此我建议使用numChildren()
功能:
db.ref('/users').once('value').then(snapshot =>
Math.floor((Math.random() * snapshot.numChildren()))
);
或者使用count
-method:
db.ref('/users/count').once('value').then(snapshot =>
Math.floor((Math.random() * snapshot.val()))
);
获取随机节点:
db.ref('/users').orderByKey().startAt(random).limitToFirst(1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)