我正在尝试为一个工作项目创建一个小的任务管理站点。这里的总体目标是,每个月的任务保持不变(它们的状态可以更新,什么都可以),并且每个新月的开始都需要重复这些任务,以便可以在表上显示和排序这些任务。< / p>
我已经弄清楚了如何安排任务,已经有了需要设置的表。在代码之前做一些解释-我打算这样做的方式是有两个不同的任务集合-一个我称为“任务”的东西,将具有需要重复的任务(及其描述,状态和其他必要条件)数据)和另一个集合(我称为“任务”)将具有完全相同的数据,但带有一个额外的“日期”字段。这是表格从中获取数据的地方,日期仅用于排序目的。
这是我到目前为止所拥有的-
Index.js:从数据库获取所有分配,并将对象发送到重复函数。
router.get('/test', async function(req, res, next) {
let allTasks = await dbModule.getAllAssignments();
let result = await dbModule.duplicateTasks(allTasks);
res.json(result);
});
dbmodule.js:
getAllAssignments: () => {
allAssignments = Assignment.find({});
return allAssignments;
},
duplicateTasks: (allTasksToAdd) => {
try {
for (let i = 0; i < allTasksToAdd.length; i++) {
let newTask = new Task({
customername: allTasksToAdd.customername,
provname: allTasksToAdd.provname,
description: allTasksToAdd.description,
status: allTasksToAdd.status,
date: "07-2020"
})
newTask.save();
}
return "Done"
} catch (error) {
return "Error"
}
}
当我尝试并实际复制任务时出现问题。出于测试目的,这次我手动输入了日期,但最终只能插入日期-仅是日期,其余数据将被跳过。我听说过db.collection.copyTo()
,但不确定是否允许我插入所需的字段,或者猫鼬是否支持该字段。我知道绝对有更简单的方法可以做到这一点,但我还不太清楚。如果有人的话,我很乐意提供一些意见和建议。
谢谢。
答案 0 :(得分:1)
问题在于allTasksToAdd.customername
(以及您尝试访问的其他字段)将为undefined
。您需要访问当前索引下的字段:
let newTask = new Task({
customername: allTasksToAdd[i].customername,
provname: allTasksToAdd[i].provname,
description: allTasksToAdd[i].description,
status: allTasksToAdd[i].status,
date: "07-2020"
})
请注意,您可以改为使用for .. of
循环来简化此操作:
for (const task of allTasksToAdd) {
const newTask = new Task({
customername: task.customername,
provname: task.provname,
description: task.description,
status: task.status,
date: "07-2020"
});
newTask.save();
}