mongodb - 如何保存多个for循环数据?
问题描述
在 Post 请求中,我想提取 objectId 的数据并将其保存在数据库中。将有 2 或 3 个 objectId,我将在数组中获取它。从该数组中,我可以使用单独的“for 循环”提取数据,但最后我无法保存数据。我想知道如何将数据从一个数组移动到另一个数组或直接保存数据。
架构:--
const jobSch = new Schema({
token : {type:Number},
name : {type:String},
phoneNumber: {type:Number},
gender : {type:String},
stage : {type:String},
categoryId : [Schema.Types.ObjectId],
subCategoryId : [Schema.Types.ObjectId],
serviceId : [Schema.Types.ObjectId],
category : [String],
subcategory : [String],
service: [String],
paymenttype: [String],
tax: {type:Number},
totalprice: {type:String},
servicePerson: {type:String},
createdOn : {type:Date, default:new Date()},
updatedOn : {type:Date, default:new Date()}
});
POST请求代码:--
router.post('/', async (req, res) => {
let ids = req.body;
let catId = ids.categoryId;
console.log("catId", catId)
console.log("catId.length", catId.length)
let subcatId = ids.subCategoryId;
console.log("subcatId", subcatId);
console.log("subcatId.length", subcatId.length)
let serId = ids.serviceId;
console.log("serId", serId);
console.log("subcatId.length", serId.length)
let job = new Job(ids);
let catgy=[];
let subcatgy=[];
let subser=[];
for (i = 0; i < catId.length; i++) {
Category.findById(catId[i])
.then(category => {
if (category && category != null) {
console.log('category.name', category.name);
catgy.push(`${category.name}`)
console.log(catgy);
}
})
}
for (i = 0; i < subcatId.length; i++) {
Service.findById(subcatId[i])
.then(service => {
if (service && service != null) {
console.log('service.name', service.name);
subcatgy.push(`${service.name}`)
console.log(subcatgy);
}
})
}
for (i = 0; i < serId.length; i++) {
Subservice.findById(serId[i])
.then(subService => {
if (subService && subService != null) {
console.log('subservice.name', subService.subService);
subser.push(`${subService.subService}`)
console.log(subser);
}
})
}
var category = catgy.slice();
console.log("category1", category)
var service = subcatgy.slice();
console.log('service2', service);
var subService = subser.slice();
console.log('subService3',subService);
console.log(job);
job.save().then(job => {
res.status(201).json({
message: 'Job saved successfully', job
})
}).catch(err => console.log(err));
});
解决方案
问题是已解决的 Promise ( findById
) 的回调函数是异步执行的。试试看这个,我想它会对你有所帮助。
推荐阅读
- node.js - 当我尝试从 axios 调用 api 数据时,出现 404 错误
- java - 有没有办法验证 GCP 资源名称而不尝试创建它?
- c# - MonoGame 中的字体太尖锐
- flutter - 为什么 FlatButton 占用的空间多于应有的空间?
- discord.js - DM 频道中的 awaitMessages
- android - 开始购买流程时,应用程序强制将方向横向更改为纵向
- c++ - 如何像二维数组一样使用 natvis 可视化列顺序矩阵
- c# - 全局错误捕获以防止运行时异常导致程序崩溃
- python - 在 Python 中加速打字自动化
- java - Fragments 在发布应用程序 android 中自动开始重新加载