从M0ngo DB中深度嵌套的对象填充详细信息

问题描述

对于可能需要阅读的大量信息,首先道歉。

我试图使其简洁和相关。

我有三个收藏集-RawMaterial,BasicRecipe和Recipe。

数据流:基本配方是原材料的组合,而配方则是原材料和基本配方的组合。我正在突出显示我使用参考模型的部分模型。

基本食谱模型:

 details: [
    {
      quantityInRecipe: {
        type: Number
      },costOfRawMaterial: {
        type: Number,default: 0
      },rawmaterialdetails: {
        type: mongoose.Schema.ObjectId,ref: 'RawMaterial'
      }
    }
  ],

食谱模型:

  rawMaterialDetails: [
    {
      quantityInRecipe: {
        type: Number
      },details: {
        type: mongoose.Schema.ObjectId,basicRecipeDetails: [
    {
      details: {
        type: mongoose.Schema.ObjectId,ref: 'BasicRecipe'
      },unitInRecipe: {
        type: Number
      }
    }
  ]

在向客户端发送数据时,我需要填充3件东西。

  1. 食谱中的rawMaterialDetails
  2. 食谱中的basicRecipe详细信息
  3. 基本食谱中的rawMaterialDetails

我正在调用以下函数来填充数据。

exports.getAllRecipies = factory.getRecipe(
  Recipe,'rawMaterialDetails.details','basicRecipeDetails.details','basicRecipeDetails.details.details.rawmaterialdetails'
);

exports.getRecipe = (Model,popOption1,popOption2,popOption3) =>
  catchAsync(async (req,res,next) => {
    //console.log(Model);
    let filter = {};
    let selectFields = {};
    let features = Model.find(filter);

    if (popOption1)
      features = Model.find(filter)
        .populate(popOption1)
        .populate(popOption2)
        .populate(popOption3);

    // const doc = await features.query.explain();

    const doc = await features;

    // SEND RESPONSE
    res.status(200).json({
      status: 'success',results: doc.length,data: {
        data: doc
      }
    });
  });

通过此操作,我可以填充rawMaterialDetails和basicRecipeDetails。

我需要帮助来填充basicRecipeDetails中的rawMaterialsDetails。

这是我得到的结果的快照:

 "basicRecipeDetails": [
                    {
                        "_id": "5f59fc6c10d428e2b16eae1c","details": {
                            "brandName": "Piatto","_id": "5f58fd4574902c702a494200","name": "New Immer Macaron Shell","details": [
                                {
                                    "costOfRawMaterial": 39.6,"_id": "5f36cd45875da6156c9a0787","quantityInRecipe": 330,"rawmaterialdetails": "5f36cd45875da6156c9a0787"
                                },{
                                    "costOfRawMaterial": 412.5,"_id": "5f36cdfc875da6156c9a078f","rawmaterialdetails": "5f36cdfc875da6156c9a078f"
                                },{
                                    "costOfRawMaterial": 7.26,"_id": "5f397abb59ad0ba71f27fa93","quantityInRecipe": 121,"rawmaterialdetails": "5f397abb59ad0ba71f27fa93"
                                },{
                                    "costOfRawMaterial": 31.44,"_id": "5f397adb59ad0ba71f27fa94","quantityInRecipe": 131,"rawmaterialdetails": "5f397adb59ad0ba71f27fa94"
                                }
                            ],"baseQuantity": 912,"baseUnit": "gm","rate": 491,"recipeUrl": "","yieldBasicRecipe": 900,"unitPerBaseQuantity": 7,"costPerUnit": 70.14285714285714,"weightPerUnit": 130.28571428571428,"__v": 0
                        },"unitInRecipe": 2
                    }]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)