Почему мангуста заполняет виртуальное поле как массив, а не как отдельный элемент? - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу заполнить объект виртуальным полем с помощью mongoose в качестве объекта JSON, но он всегда возвращает массив с одним элементом.

Вот мой код схемы (часть с виртуальным полем):

Order.virtual('client', {
    type: 'ObjectId',
    ref: 'User',
    localField: 'clientId',
    foreignField: '_id'
});

Вот как я делаю заполнение:

Order.findOneAndUpdate({ internalStatus: 2}, { internalStatus: 3 })
    .lean()
    .populate({ path: 'client', select: 'email' })
    .exec(function (err, order) {
        //...
    });

Вот что я получаю в возвращенном JSON:

{ _id: 5ad903d90443fe13b8c9061a,
    client: [ { _id: 5b3755fe69635d1e942d00a8, email: 'user@user.com' } ] }

Вот чего я хочу добиться:

{ _id: 5ad903d90443fe13b8c9061a,
    client: { _id: 5b3755fe69635d1e942d00a8, email: 'user@user.com' } }

Спасибо за любую помощь или предложения!

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Вы должны добавить « justOne: true » в конфигурацию вашего виртуального поля:

Order.virtual('client', {
    type: 'ObjectId',
    ref: 'User',
    localField: 'clientId',
    foreignField: '_id',
    justOne : true

});
0 голосов
/ 01 октября 2018

В mongoose mongoose@5.0.17 я вижу, что они возвращаются как JSON_OBJECT, но когда я обновился до mongoose@5.3.0, он начал перенастраиваться как JSON_ARRAY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...