Метод агрегирования для каждого документа, полученного в результате метода поиска в mongodb

#mongodb

#mongodb

Вопрос:

Я хочу выполнить этот агрегированный запрос:

 db.collection('mycoll').aggregate([  {  $search: {  index: 'default',  text: {  query: 'night',  path: {  wildcard: '*',  },  },  },  },  ])    })  

для каждого документа, полученного в результате моего метода поиска:

вот мой метод поиска:

 app.get('/', (req, res) =gt; {  db.collection('subs').find(  { name: { $regex: 'dexter', $options: '$i' } },  { projection: { _id: 0, content: 0 } }  )  .toArray((err, result) =gt; {  if (err) {  throw new err();  }  res.json({  length: result.length,  body: { result },  });  }); });  

Я знаю, что, вероятно, мне придется использовать forEach и создать функцию, но я не смог выяснить, что поместить в эту функцию, я предполагаю, что ## Заголовок ##это должно быть что-то вроде этого:

 .find(  { name: { $regex: 'dexter', $options: '$i' } },  { projection: { _id: 0, content: 0 } }  ).forEach(()=gt;{})  .toArray((err, result) =gt; {  if (err) {  throw new err();  }  res.json({  length: result.length,  body: { result },  });  }); });  

Ответ №1:

Вы можете достичь этого несколькими различными способами, вот самый простой пример кода, который я мог бы создать:

 app.get('/', async (req, res) =gt; {  const result = await db.collection('subs').find(  {name: {$regex: 'dexter', $options: '$i'}},  {projection: {_id: 0, content: 0}}  ).toArray();   const finalResults = await Promise.all(result.map(async (each) =gt; {  each.textSearchResults = await db.collection('mycoll').aggregate([  {  $search: {  index: 'default',  text: { // decide what your query is based on each document  query: each.name,  path: {  wildcard: '*',  },  },  },  },  ])  return each  }))    res.json({  length: result.length,  body: {result},  }); });