首页 > 解决方案 > 从一个数组 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

标签: node.jsfirebasegoogle-cloud-functions

解决方案


计算 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);
});

推荐阅读