Заполнить массив refPath вложенный объект - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь заполнить вложенный объект мангустом.У меня есть документ, который содержит список товаров или услуг.Я использую refPath, чтобы добавить его динамически.Проблема в том, что когда я пытаюсь заполнить продукт / услугу по пути, это не работает.

Вот моя схема:

const quoteSchema = new Schema({
    other: {type: String},
    list_items: [
    {
        item_id: {
            type: Schema.ObjectId,
            require: true,
            refPath: "type"
        },
        type: {
            type: String,
            required: true,
            enum: ['service', 'product']
        },
        quantity: {type: Number},
        desc: {type: String},
        discount: {type: Number},
        unit_price: {type: Number},
        total: {type: Number},
    }
  ],

});

Тогда у меня есть запрос:

mongoose.model(model).find({ company_id: mongoose.Types.ObjectId(company_id), _id: mongoose.Types.ObjectId(id) })
        .populate([{
          path: 'list_items.item_id',
          model: 'list_items.type'
        }])
        .lean()
        .exec( (err, doc) => {

        return res.json({ success: true, payload: doc });
    });   

1 Ответ

0 голосов
/ 29 декабря 2018

Я нахожу решение!Я изменяю refPath, добавляя имя массива, чтобы оно выглядело как

вместо refPath: "onModel"

Теперь это: "list_items.onModel"

Вот обновленная схема:

const quoteSchema = new Schema({    
    list_items: [
        {
            item_id: {
                type: Schema.ObjectId,
                require: true,
                refPath: "list_items.onModel"
            },
            onModel: {
                type: String,
                required: true,
                enum: ['service', 'product']
            },
            quantity: {type: Number},
            desc: {type: String},
            discount: {type: Number},
            unit_price: {type: Number},
            total: {type: Number},
            ref: {type: String}
        }
    ],
    })

Тогда

mongoose.model(model).findOne({ company_id: mongoose.Types.ObjectId(company_id), _id: mongoose.Types.ObjectId(id) })
        .populate('list_items.item_id')
        
        //....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...