Фильтровать вложенные документы в метеорах

У меня возникают проблемы при попытке отфильтровать вложенные документы в Meteor, и я не хочу использовать агрегацию MongoDB для разматывания своих документов.

Пример моего документа Users

{
   Publications:[{ 
       type:1
   },{ 
       type:2
   }]
}

Когда я делаю поиск, чтобы получить только тип 1, я получаю ожидаемый результат - они возвращают только документы пользователя, у которых есть публикация типа 1, но они также возвращают публикации с типом 2, потому что они находятся в массиве публикаций этого Пользователь.

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

Может кто-нибудь, пожалуйста, помогите мне найти лучшее решение?

Edited

Ответ Шона хороший, но еще не правильный, проекция не работает на метеоре. Это работает на robomongo, но в проекте все еще возвращаются 2 типа публикаций пользователя.


person Luan Soares    schedule 18.02.2016    source источник
comment
Вы можете получить подмножества документов из mongodb, используя проекции.   -  person Sean    schedule 19.02.2016
comment
@ChristianFritz, проекция делает это, Шон привел пример выше.   -  person Luan Soares    schedule 19.02.2016
comment
@LuanSoares: спасибо, я не знал об операторе $ в прогнозах. Я удалил комментарий.   -  person Christian Fritz    schedule 20.02.2016


Ответы (1)


Попробуйте этот запрос.

Meteor.users.find(
    { 'Publications.type': 1 },
    { fields: { 'Publications.$': 1 } }
);

Это должно найти пользователей с публикациями типа 1, и в вывод будут включены только соответствующие публикации. Вы также можете включить в вывод другие поля, включив их в проекцию. параметр (например, { 'Publications.$': 1, profile: 1 }).

Однако нужно знать одну вещь. Я думаю, что запросы, использующие проекцию { 'Publications.$': 1 }, могут выполняться только на стороне сервера. Реализация minimongo, используемая на клиенте, не поддерживает его.

Дополнительную информацию о проекции $ можно найти здесь .

person Sean    schedule 18.02.2016
comment
Просто исправление find({'Publications.tipo':'1'},{fields:{'Publications.$':1}}); - person Luan Soares; 22.02.2016
comment
Ах да. Я использовал чистый синтаксис MongoDB. Обновлю свой ответ, чтобы отразить синтаксис Meteor. - person Sean; 22.02.2016