2015-09-27 5 views
0

у меня есть этот MongoDB Извещение Модель:Mongoose: Часть массива

  • Пользователь: Монго ID
  • Создано: Дата
  • Содержание: {}
  • Подписки: [{пользователя: Монго Id, чтения: Boolean}]

Использование Mongoose в NodeJS создать запрос, вернуть все документы, где мой пользователь находится внутри массива подписок.

Notification 
    .find({subscriptions:{$elemMatch: {user: req.user}}}) 
    .sort('-created') 
    .exec(function (err, notifications) { 

     if (err) { 
      return res.status(400).send({ 
       message: errorHandler.getErrorMessage(err) 
      }); 
     } else { 

      res.jsonp(notifications); 
     } 
    }); 

Этот запрос работает, и возвращает документы, которые я хотел ... Но я не хочу, именно это ... Этот код возвращается в документы возвращаются, все подписки массив, в том числе других пользователей , Если в массиве подписки есть 10.000 пользователей, все пользователи будут возвращены во всех документах.

Как извлечь часть массива? Я хочу, чтобы только мой пользователь был возвращен внутри массива подписок. Почему? по соображениям безопасности и производительности.

Я попробовал этот запрос:

.find({subscriptions:{$elemMatch: {user: req.user}}}, {'subscriptions.$': 1}) 

Этот запрос возвращает только один пользователь в массиве подписки (мой пользователь). Но ... Не возвращено ни одного поля больше, кроме массива подписок ...

Любое предложение?

ответ

1

Вы можете включать в себя другие поля в ваш результат, как это:

.find({ 'subscriptions': { '$elemMatch': { 'user': req.user }}}, 
    { 'subscriptions.$': 1, 'content': 1, 'created': 1, 'user': 1 } 
) 
+0

Ok, работает !! Спасибо! –

Смежные вопросы