无法填充嵌套数组

时间:2019-10-04 13:42:02

标签: javascript node.js mongoose

我知道这已经被问了一百万遍了,但这似乎对我没有用。从数据库获取对象时,找不到在对象中填充引用的方法。无论我尝试什么,它要么返回一个空列表,要么仅返回id的列表。我在这里做什么错了?

displayInventory: (req, res)=>{
    Merchant.find({otherId: merchantId})
        .populate({
            path: "ingredients", 
            populate: {
                path: "ingredient", 
                model: "Ingredient"
            }
        })
        .then((merchant)=>{
            console.log(merchant);
            if(merchant){
                return res.render("./inventory/inventory", {merchant: merchant});
            }else{
                return res.redirect("/merchant/new");
            }
        })
        .catch((err)=>{
            console.log(err);
            return res.render("error");
        });
}

const MerchantSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    otherId: {
        type: String,
        required: true
    },
    lastUpdatedTime: {
        type: Date,
        default: Date.now
    },
    ingredients: [{
        ingredient: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Ingredient"
        },
        quantity: {
            type: Number,
            min: [0, "Quantity cannot be less than 0"]
        }
    }],
    recipes: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "Recipe"
    }]
});

3 个答案:

答案 0 :(得分:1)

请参阅您的架构,看起来您只需要这样做:

Merchant.find({cloverId: merchantId}).populate("ingredients.ingredient")...

答案 1 :(得分:0)

您可以尝试以下代码。

Merchant.find({otherId: merchantId})
  .populate({ path: 'ingredients' })
  .exec(function(err, docs) {

    var options = {
      path: 'ingredients.components',
      model: 'Ingredient'
    };

    if (err) return res.json(500);
    Merchant.populate(docs, options, function (err, merchant) {
      res.json(merchant);
    });
  });

答案 2 :(得分:0)

如果其他人有类似的问题,我将回答我自己的问题。我的问题是我重命名了一些变量,但是在将数据保存到数据库时忘记这样做。愚蠢的错误,但只是提醒您在重构时要小心。我用了Coung Le Ngoc的回答,效果很好。