Javascript 如何在云函数中循环Firestore数组值

Javascript 如何在云函数中循环Firestore数组值,javascript,firebase,google-cloud-firestore,google-cloud-functions,Javascript,Firebase,Google Cloud Firestore,Google Cloud Functions,我一直在尝试让一个云函数在我的云Firestore中的数组值上循环。我已搜索堆栈溢出,但尚未找到解决方案。 我的Firestore结构如下所示: Jacascript中的my Cloud函数: exports.createdEnv = functions.firestore.document('environments/{environmentName}') .onCreate(async snapshot => { const environmentName = snapshot.i

我一直在尝试让一个云函数在我的云Firestore中的数组值上循环。我已搜索堆栈溢出,但尚未找到解决方案。 我的Firestore结构如下所示:

Jacascript中的my Cloud函数:

exports.createdEnv = functions.firestore.document('environments/{environmentName}')
.onCreate(async snapshot => {

const environmentName = snapshot.id;
const days = db.collection(environmentName);
const batch = db.batch();

        ['2020-02-06', '2020-02-07', '2020-02-08'].forEach((day) => {
        const documentReference = days.doc(day);
        batch.set(documentReference, {});

        //this is where I'm stuck
        const dataMachines = snapshot.data().machineNames;
        for (const value in dataMachines) {
        const valueMachine = dataMachines[value];
        console.log(snapshot.get('machineNames')[0]);
        snapshot.get('machineNames').forEach((value) => {

        //I want each value of the array to be set as subcollection below
        const hoursReference = documentReference.collection(value);
        const dataMap = {   '001': '08:00-09:00',
                            '002': '09:00-10:00',
                            '003': '10:00-11:00',
                            '004': '11:00-12:00',
                            '005': '12:00-13:00',
                            '006': '13:00-14:00',
                            '007': '14:00-15:00',
                            '008': '15:00-16:00',
                            '009': '16:00-17:00',
                            '010': '17:00-18:00',
                            '011': '18:00-19:00',
                            '012': '19:00-20:00',
                            '013': '20:00-21:00',
                            '014': '21:00-22:00',
                                                    };
        Object.keys(dataMap).forEach((hour) => {
            batch.set(hoursReference.doc(hour), {
                hour: dataMap[hour],
                reserved: '',
                name: '',
                date: '',
            });
        });

        });

        }

    });

    return batch.commit()
    .then(() => {console.log('ok'); return null })
    .catch((err) => {console.log(err); });
});

我已经在这个问题上纠缠了一段时间,我觉得我错过了什么或忘记了什么。如果有人能给我指出正确的方向那就太好了

如果我正确理解了你的目标,那么以下几点应该是有效的:

//....
const dataMachines = snapshot.data().machineNames;

dataMachines.forEach(machineName => {

    const hoursReference = documentReference.collection(machineName);

    //....

})

//....
调用返回一个JavaScript对象,其中
machineNames
属性是一个数组。您可以使用
console.log(Array.isArray(dataMachines))检查它

因此,您只需使用来获取存储在数组中的不同值



旁注:您将在其他几种可能的JavaScript数组循环方法中找到

如果我正确理解了你的目标,那么以下几点应该是有效的:

//....
const dataMachines = snapshot.data().machineNames;

dataMachines.forEach(machineName => {

    const hoursReference = documentReference.collection(machineName);

    //....

})

//....
调用返回一个JavaScript对象,其中
machineNames
属性是一个数组。您可以使用
console.log(Array.isArray(dataMachines))检查它

因此,您只需使用来获取存储在数组中的不同值



旁注:您将在其他几种可能的JavaScript数组循环方法中找到

你能更详细地解释一下你到底想做什么吗。这有点难理解。首先,为什么要执行
batch.set(documentReference,{})
您不会将任何(数据)值传递给
set()
。其次,您能否举例说明云功能的预期结果:使用哪些内容创建哪些文档和集合。谢谢当然函数将创建一个新集合,其名称为environmentName。在该集合中,函数设置了3个文档;2020-02-06, 2020-02-07, 2020-02-08. 然后,这些文档中的每个都应该有子集合,其中包含数组中的值的名称。如果我用一个简单的字符串替换hoursReference中的'value',那么子集合就可以毫无问题地创建了。您能否更详细地解释一下您到底想做什么。这有点难理解。首先,为什么要执行
batch.set(documentReference,{})
您不会将任何(数据)值传递给
set()
。其次,您能否举例说明云功能的预期结果:使用哪些内容创建哪些文档和集合。谢谢当然函数将创建一个新集合,其名称为environmentName。在该集合中,函数设置了3个文档;2020-02-06, 2020-02-07, 2020-02-08. 然后,这些文档中的每个都应该有子集合,其中包含数组中的值的名称。如果我用一个简单的字符串替换hoursReference中的'value',那么就可以毫无问题地创建一个子集合。谢谢,这太棒了!其他答案的链接也非常有用,再次感谢大家!谢谢,这太棒了!其他答案的链接也非常有用,再次感谢大家!