Mongoose виртуальный возврат ноль - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть схема Person:

const person = new mongoose.Schema({
    name: String,
    birthday: Date,
    sex: String
},
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});

person.virtual('tasks', {
    ref: 'task',
    localField: '_id',
    foreignField: 'person'
});

export default mongoose.model('person', person);

И задача, которая имеет поле person:

const schema = new mongoose.Schema({

    person: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'person',
        required: true
    },

    name: String
});

export default mongoose.model('task', schema);

И мой API для получения одного человека:

api.get('/person/:id', async (req, res) => {
    let personID = req.params.id;

    if (personID) {
        let person = await Person.findById(personID);

        if (person)
            res.json(person);
        else
            res.status(404).end();
    }
    else {
        res.status(400).end();
    }
});

Когда я запрашиваю API для одного человека, tasks всегда null, есть идеи, почему?

Спасибо

Обновление

Я пробовал с:

let person = await Person.findById(personID).populate('tasks').exec();

и он все еще возвращает null.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Хорошо, я обнаружил проблему, я регистрировал модель перед настройкой виртуальной (в какой-то оболочке я писал вокруг mongoose.Schema).

0 голосов
/ 15 ноября 2018

Используйте populate в своем запросе.

Можете ли вы проверить один из следующих запросов

let person = await Person.findOne({ _id: personID })
  .populate('tasks')
  .exec((error, personData)
    => personData);

ИЛИ

let person = await Person.findById(personID)
  .populate('tasks')
  .exec((error, personData) => personData);

ссылка Ссылка: http://thecodebarbarian.com/mongoose-virtual-populate

...