mongodb получить список вложенных документов, которые соответствуют списку значений - PullRequest
0 голосов
/ 24 февраля 2020

моя схема документа выглядит следующим образом

_id: kkj33h2kjkjh32jk34
events: [
        {
          _id: k234j3lk4k2j3h4j3j4
        },
        {
          _id: k234j3lk4k2j3h4j3j4
        },
        {
        _id: k234j3lk4k2j3h4j3j4
         }
      ]

вот мой запрос, у меня есть список _ids поля вложенных документов событий, и мне нужно получить все совпадающие вложенные документы в качестве ответа от события поле, которое я пытался использовать $ in и многие, но не удалось, может кто-нибудь подсказать мне, как это сделать

пробовал это

subarr=['fh576hgfu658uyg7h','k234j3lk4k2j3h4j3j4']
model.findOne({
                    clgid: req.query.clgid,
                    'events._id': {$in:subarr}
                },{"events.$":1});

, но проблема с приведенным выше кодом заключается в том, что он выбирает первый соответствующий поддокумент. но мне нужны все соответствующие поддокументы. предложите мне правильный способ сделать этот запрос, чтобы я получил все совпадающие вложенные документы из массива

1 Ответ

0 голосов
/ 06 марта 2020

Проблема вашего запроса, соответствующего только первому поддокументу, заключается в использовании {"events.$":1} в вашей проекции.

Я не уверен, что вы на самом деле собираетесь делать. {"events.$":1} будет ограничен первым (под) документом, соответствующим вашему запросу, согласно документации оператора $ .
Возможно, вы пытаетесь получить только _id из Поддокументы, а затем, пожалуйста, попробуйте следующее:

subarr=['fh576hgfu658uyg7h','k234j3lk4k2j3h4j3j4']
model.findOne({
    clgid: req.query.clgid,
    'events._id': {$in:subarr}
},{"events._id":1});
...