Пн goose: фильтр вложенных документов - PullRequest
0 голосов
/ 16 января 2020

У меня есть коллекция MongoDB с документами, имеющими следующую форму:

"peopleList": [
 {
  "_id": "List 1 id",
  "name": "List 1",
  "people": [
    {
      "_id": "A Person id",
      "name": "A Person",
      "email": "person@email.com"
    },
    {  
      "_id": "Another Person id",
      "name": "Another Person",
      "email": "another.person@email.com"
    },
  ],
 },
 {
  "_id": "List 2 id",
  "name": "List 2",
  "people": [
    {
      "_id": "A Person id",
      "name": "A Person",
      "email": "person@email.com"
    },
  ],
 }
]

Как видите, один и тот же объект Person может появляться в нескольких списках.

Итак, я хочу чтобы получить все списки, которые данный человек является частью.

Например:

Passing _id: "A Person id" -> the query should return List 1 and List 2,

Passing _id: "Another Person id:" -> the query should return only List 1.

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

await PeopleList.find({ people: { _id: 'A person id' } });

Но запрос возвратил пустой массив, даже 'Идентификатор человека' представляет собой документ во многих списках.

РЕДАКТИРОВАТЬ

Обмен ответом Фахада, правильный запрос:

await PeopleList.find({
  people: { $elemMatch: { _id: mongoose.Types.ObjectId('A person id') } 
}});

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Вы должны использовать $elemMatch и $in, чтобы найти в массиве. Так попробуй вот так

 "people": { $elemMatch: { "_id": { $in: [mongoose.Types.ObjectId(params.id) ] } } }
0 голосов
/ 16 января 2020

Предположим, что ваше mongo schema имя PeopleList, поэтому ваш запрос фильтра будет выглядеть следующим образом

PeopleList.find({people : {$elemMatch:{_id: mongoose.Types.ObjectId('321321321321321')}});

Для получения дополнительной информации вы можете увидеть документацию здесь

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