Javascript 如何在云函数中循环Firestore数组值
我一直在尝试让一个云函数在我的云Firestore中的数组值上循环。我已搜索堆栈溢出,但尚未找到解决方案。 我的Firestore结构如下所示: Jacascript中的my Cloud函数: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
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',那么就可以毫无问题地创建一个子集合。谢谢,这太棒了!其他答案的链接也非常有用,再次感谢大家!谢谢,这太棒了!其他答案的链接也非常有用,再次感谢大家!