首页 > 解决方案 > 如何在 Mongoose 中填充以下格式的数据集合

问题描述

要从 Atlas 中获取的数据包含 3 个文档(Schema-categorySchema),每个文档存储另一个文档的 objectIds 数组(Schema-subCategorySchema)

{"_id":{"$oid":"5f055f4b00bde224583e35cf"},"name":"cat1","sub_categories":[],"__v":0}
{"_id":{"$oid":"5f055f5700bde224583e35d0"},"name":"cat2","sub_categories":[{"_id":{"$oid":"5f05a8633ca5a141d45c2dee"},"subcatergory_id":{"$oid":"5f05a8633ca5a141d45c2ded"}},{"_id":{"$oid":"5f05ab45f69e0435b81ff560"},"subcatergory_id":{"$oid":"5f05ab44f69e0435b81ff55f"}}],"__v":2}
{"_id":{"$oid":"5f058108f14eba3aa067e7a0"},"name":"Veg1","sub_categories":[],"__v":0}

下面提到了上述数据的模式。

const categorySchema = new Schema({ name: { type: String, required: true, }, sub_categories: [ { subcatergory_id: { type: Schema.Types.ObjectId, required: true, ref: "SubCategory", }, }, ], });

我期望填充 3 个文档以及 ObjectId 数组引用的数据。
如何为基于上述模型的获取输出编写查询?

我写了一个如下所示的查询,但它失败了。

exports.getCategoryList = (req, res, next) => {  
    Category.find().then((categories) => {       
        console.log(categories.sub_categories); 
        if (categories) {
            res.json({ "Category List": categories.sub_categories });
        } else {
            res.send("Empty Category List");
        }
    }).catch((err) => res.send("error:" + err));
};

标签: mongoosemongoose-schemamongoose-populate

解决方案


您可以这样填充:

Category.find()
       .populate('sub_categories._id sub_categories.subcatergory_id')
       .then((categories) => {       
        console.log(categories.sub_categories); 
        if (categories) {
            res.json({ "Category List": categories.sub_categories });
        } else {
            res.send("Empty Category List");
        }
    }).catch((err) => res.send("error:" + err));

或者


Category.find()
        .populate('sub_categories._id')
        .populate('sub_categories.subcatergory_id')
        .then((categories) => {       
        console.log(categories.sub_categories); 
        if (categories) {
            res.json({ "Category List": categories.sub_categories });
        } else {
            res.send("Empty Category List");
        }
    }).catch((err) => res.send("error:" + err));

推荐阅读