Как заполнить сбор данных в формате ниже в Mongoose

Данные, которые должны быть извлечены из Атласа, содержат 3 документа (Schema-categorySchema), каждый документ хранит массив идентификаторов объектов другого документа (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));
};

person Avinash Boddu    schedule 08.07.2020    source источник


Ответы (1)


Вы можете заполнить так:

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));
person Talha Noyon    schedule 08.07.2020
comment
@Avinash Boddu Добро пожаловать. - person Talha Noyon; 09.07.2020