最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

NodeJS +猫鼬:保存一个模型并获取ID以在另一个模型中聚合

运维笔记admin10浏览0评论

NodeJS +猫鼬:保存一个模型并获取ID以在另一个模型中聚合

NodeJS +猫鼬:保存一个模型并获取ID以在另一个模型中聚合

我需要你的帮助。这里是前提:

我有3种不同类别的产品目录。为了说明一个简单的例子,我有这个:

The“ mains

”:
  • 水果和蔬菜
  • 肉类
  • Submains

”:

来自main

水果和蔬菜”我得到:
  • 水果
  • 蔬菜
  • 然后是一堆“ 子类别

”:
  • 主要“ ”内:牛肉,猪肉,家禽
  • 主要
  • 鱼”内:金枪鱼,鲑鱼
  • submain
  • Fruit”内:香蕉,西瓜
  • submain
  • 内部“ 蔬菜”:胡萝卜,豌豆

因此,我创建了一个三步函数,该函数首先采用“ 子类别

”并将其保存到特定的集合中,然后将其对应的“ _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()

我的异步函数应该等待的函数在函数的最后执行。这意味着在执行其余函数时,我的addedSubCatsaddedSubMains数组为空...

提前感谢!

我需要你的帮助。这里是前提:我有3种不同类别的产品目录。为了说明一个简单的例子,我得到了这个:“主要”:水果&...

回答如下:

该问题的解决方案是在保存模型之前创建_id:

发布评论

评论列表(0)

  1. 暂无评论