#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}, }); });