Пн goose найти все документы, которые соответствуют каждой записи массива идентификаторов - PullRequest
0 голосов
/ 15 января 2020

У меня есть массив идентификаторов MongoDB: networks = ["5e1cfabb61e9314617fe2db5", "5e1cfbbbe519704860d9a720", "5e1cfbdd4ab5514888b4c6eb"]

Мне нужно положить sh в новый массив все документы (полный объект) из моей базы данных, которые соответствуют каждой записи массива сетей.

Поэтому я хочу новый тип Допустим, люди в сетях будут такими:

`peopleNetworks = [
  {
    "_id": "5e1cfabb61e9314617fe2db5",
    "name": "Facebook",
    "createdAt": "2020-01-13T23:18:19.593Z",
    "updatedAt": "2020-01-13T23:18:19.593Z",
    "__v": 0
  },
  {
    "_id": "5e1cfbbbe519704860d9a720",
    "name": "Instagram",
    "createdAt": "2020-01-13T23:22:35.057Z",
    "updatedAt": "2020-01-13T23:22:35.057Z",
    "__v": 0
  },
  {
    "_id": "5e1cfbdd4ab5514888b4c6eb",
    "name": "Vero",
    "createdAt": "2020-01-13T23:23:09.501Z",
    "updatedAt": "2020-01-14T00:00:05.458Z",
    "__v": 0
  }
]`

Я пытался отфильтровать свою коллекцию, используя массив сетей, например:

`const peopleNetworks = [];
 const storedNetworks = await Network.find();
 storedNetworks.filter(network => { networks.forEach(id => 
  {
   if (id === network._id) peopleNetworks.push(network);
  })
 );`

Но это не работает.

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

Ответы [ 2 ]

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

Вы должны использовать оператор $in. Что-то вроде

await Network.find({ _id: { $in: networks } });

. Это должно вернуть вам нужные документы, и вам не нужно извлекать все, а затем фильтровать

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

Вы можете использовать $ в операторе mongodb с find

const storedNetworks = await Network.find({"_id":{"$in":networks}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...