Как добавить результат запроса поиска Монго в другой запрос поиска - PullRequest
0 голосов
/ 17 мая 2018

Прежде всего я ищу все групповые документы в моей коллекции:

const groups = await Content.find({ type: 'group' }).toArray()

Для этого массива мне нужно найти каждый дочерний документ и добавить его к объекту:

groups.map(async g => {
  g.content = await Content.find({
    type: 'element',
    parent: g._id
  }).toArray()

  console.log(g) // <-- has content field, which is what I am expecting
})

console.log(groups) // <-- content field is missing

Пример

Чтобы было немного понятнее: groups может иметь такой результат:

[{
  _id: 'xxnQt5X8pfbcJMn6i',
  title: 'Title',
  type: 'group',
}]

Теперь я ищу каждый элемент (в этом примере он только один) для всех документов с родительским идентификатором, и этот результат должен быть добавлен в качестве поля к group.

[{
  _id: 'xxnQt5X8pfbcJMn6i',
  title: 'Title',
  type: 'group',
  content: [
    { _id: '1', title: 'example', parent: 'xxnQt5X8pfbcJMn6i' },
    { _id: '2', title: 'another example', parent: 'xxnQt5X8pfbcJMn6i' }
  ]
}]

В своей попытке я не получаю содержимое при выполнении console.log вне карты ().

И, возможно, это можно сделать напрямую с моим запросом mongoDB (я использую собственный драйвер mongoDB )

1 Ответ

0 голосов
/ 17 мая 2018

Это идеальный случай, когда вы ищете Promise.all

var promiseArray = groups.map(g => {
  return Content.find({type: 'element',parent: g._id},function(err,cursor){
       g['content'] = cursor.toArray();
       return g;
  });
})

Promise.all(promiseArray ).then(function(groups) {
    console.log(groups)
})
...