node.js - 从一个数组 Firestore (Firebase) 中选择随机值
问题描述
我有一个 Posts 节点,它是用户的时间线。
样本:
TIMELINE_INDEX
- ID_POST_1
- ID_POST_2
- ID_POST_3
- ID_POST_4
- ID_POST_5
- ID_POST_6
- ID_POST_7
我有一个流程如下:
- 我不时调用一个函数(云函数),在用户的时间轴中插入一条新记录。
我需要做什么:
我想插入另一个节点上的记录。我有一个名为 ADS(广告)的节点:
ADS
- ID_AD_1
- ID_AD_2
- ID_AD_3
- ID_AD_4
- ID_AD_5
我需要帮助才能访问此 ADS 节点,选择一个随机 ID 并获取其值。从这里我可以在时间轴中执行插入。
ADS 节点的访问模型 - 示例: 只有在这里我需要选择一个随机值。
var adsRef = db.collection('ads');
var allAds = adsRef.get()
.then(snapshot => {
//Only here I need to choose a random value.
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
预计在插入新芯片后时间线节点是这种方式。
TIMELINE_INDEX
- ID_POST_1
- ID_AD_4
- ID_POST_2
- ID_POST_3
- ID_POST_4
- ID_POST_5
- ID_POST_6
- ID_POST_7
解决方案
计算 0 范围和snapshot
变量长度之间的随机整数。
var adsRef = db.collection('ads');
var allAds = adsRef.get()
.then(snapshot => {
// Grab a random item from the snapshots
var random = Math.floor(Math.random() * (snapshots.length - 0 + 1) + snapshots.length);
// Log the information from this snapshot
console.log(snapshots[random].id, '=>', snapshots[random].data());
})
.catch(err => {
console.log('Error getting documents', err);
});
推荐阅读
- linux - Sending a GUI/TUI Over a Socket Connection
- java - 如何实例化一个列表
那是空的并且在使用反射的对象内?或实例化列表类型的对象 - javascript - 几分钟后,我的幻灯片播放速度比平时快
- django - Django + Nginx 配置(得到“欢迎使用 nginx!”)
- three.js - 是否可以在使用threejs的场景中避免3D对象的透视失真?
- html - WordPress:Elementor 插件正在添加
按钮 - angular - 为什么我的应用程序不与 REST API 服务器通信
- python - MQTT 应用程序 (Python) 中的多线程错误的原因?
- java - Ehcache:如何有条件地返回陈旧数据
- encoding - 如何将飞镖的 ByteData 转换为字符串?