Мне нужна твоя помощь. Вот помещения:
У меня есть каталог продуктов с 3 различными типами категорий. Для иллюстрации на простом примере у меня есть это:
" сеть ":
" Поддомены ":
из основной" Фрукты и овощи"У меня есть:
и затем куча" Подкатегорий":
- Внутри основного" мяса ": говядина, свинина, птица
- Внутри основного" рыба": тунец, лосось
- Внутри субмарина " Фрукт": банан, арбуз
- Внутри субмарина " Овощи ": морковь, горох
Итак, я создал трехшаговую функцию, которая сначала берет " Подкатегории " и сохраняетзатем они объединяются в определенную коллекцию, а затем агрегирует '_id' и main или submain , в котором она соответствует, в массив. Вот упрощение кода:
const categories = {
subMainCats: [{name: "fruit", ref: "4", family: "1"}, {name: "vegetables", ref: "5", family: "1"}],
mainCats: [{name: "Fruits & Vegetables", ref: "1"}, {name: "meat", ref: "2"}, {name: "fish", ref: "3"}],
subCats: [{name: "beef", fam: "2"}, {name: "pork", fam: "2"}, {name: "poultry", fam: "2"}, {name: "tuna", fam: "3"}, {name: "salmon", fam: "3"}, {name: "pork", fam: "5"}, {name: "peas", fam: "5"}, {name: "banana", fam: "4"}, {name: "watermelon", fam: "4"}]
};
async function orderingDb(categories) {
var subMains = categories.subMainCats;
var mains = categories.mainCats;
var subCats = categories.subCats;
// Variables to recover info from elements that were added to db:
var addedSubCats = [];
var addedSubMains = [];
// Step 1: saving the subcats
await subCats.forEach(async (subCat, index) =>{
const name =subCat.name;
const fam = subCat.fam;
// Creating the mongoose model object
const subcat = new Subcategory({
name: name,
fam: main
});
// Saving to the db and adding the _id to the array
await subcat.save().then(res => {
console.log('saving subcat!');
addedSubCats.push({
main: main,
_id: res._id
});
}).catch(err => console.log('ERROR: trying to save a subcat to mongo -- ', err));
});
// Step 2: Adding the subcats and saving the submains
await subMains.forEach(async (subMain, index) => {
const name = subMain.name;
const fam = subMain.family;
var subCats = [];
// adding the subcats to the array
addedSubCats.forEach((addedSubCat, index) =>{
if(addedSubCat.main === subMain.category.subFamily) {
subCats.push(addedSubCat._id);
addedSubCats.splice(index);
}
});
// Creating mongoose model object:
const submain = new Submaincategory({
name: name,
subCats: subCats,
main: main
});
// Saving and adding the _ids:
await submain.save().then(res => {
console.log('saving submain');
addedSubMains.push({
main: main,
_id: res._id
})
}).catch(err => console.log('ERROR: trying to save a Submain -- ', err ));
});
// ... FINALLY I'VE GOT THE SAME LOGIC FOR STEP 3 FOR THE MAINS.
}
Вот моя проблема: Функция MODEL.save () , которую должна ожидать моя асинхронная функция, выполняется в самом концефункции. Это означает, что мои AddedSubCats и AddedSubMains массивы пусты, когда остальная часть функции выполняется ...
Заранее спасибо!