Mongoose исключает объект из массива из результатов - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь исключить объект в массиве из результатов при использовании find в Mongoose с MongoDB.

Запрос:

Model.findOne({
    'eventid': query
    }
    , { 
    'email': 0, 
   'guests.$.email': 0 
    }, function (err, result) {
    if (err) throw err;
    if (result) {
        console.log(result);
    } else {
        res.send(JSON.stringify({
            error: 'Error'
        }))
    }
})

За исключением поля 'email' с 'email': 0 работает нормально. Однако 'guests' - это массив с несколькими объектами, и я хочу удалить поле электронной почты из результатов. Я получаю следующую ошибку:

MongoError: Невозможно исключить элементы массива с помощью позиционного оператора.

Очевидно, что оператор позиции $ можно использовать только для включения элементов в массив, но не для их удаления. Как лучше всего скрыть поле электронной почты в массиве 'guests'.

Пример набора данных:

{ _id: 5b71c9af75a8e95dc33e7eef,
eventid: 'ALRW9by',
email: 'test@gmail.com',
guests:
 [ { _id: 5b72f16ea61d2911d806daa8 },
   { _id: 5b7306b605bf17131f80fd0a,
     userid: 'CuzcO3c',
     naam: 'John',
     email: 'test2@gmail.com' },
   { _id: 5b7306c705bf17131f80fd0b,
     userid: 'xA7A65U',
     naam: 'Ellen',
     email: 'test3@gmail.com' }
   ] }

1 Ответ

0 голосов
/ 28 августа 2018

Просто используйте точечную нотацию guests.email, чтобы исключить вложенные поля:

Model.findOne({
    'eventid': query
    }
    , { 
    'email': 0, 
    'guests.email': 0 
    }, function (err, result) {
    if (err) throw err;
    if (result) {
        console.log(result);
    } else {
        res.send(JSON.stringify({
            error: 'Error'
        }))
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...