Мне нужно выполнить агрегат $ lookup и объединить объекты на основе соответствия регулярному выражению. Одна коллекция имеет шаблон соответствия регулярному выражению. Поэтому, основываясь на этих шаблонах, нужно выполнить поиск по другой коллекции.
У меня есть две коллекции. (1) сообщения и (2) регулярные выражения.
Вот вывод коллекции сообщений.
<code>
[{_id: ObjectId(...), message: I had a dinner at McDonald}, <br/>
{_id: ObjectId(...), message: I booked my ticket from TicketWorld},<br/>
{_id: ObjectId(...), message: I spent my weekend at Paris},<br/>
{_id: ObjectId(...), message: I went to Paris},<br/>
{_id: ObjectId(...), message: I like McDonald}]<br/>
Вот вывод коллекции регулярных выражений.
<code>
[{_id: ObjectId(...), regexMatch: /mcdonald/gi, ratePoint:3}, <br/>
{_id: ObjectId(...), regexMatch: /paris/gi, ratePoint:4},<br/>
{_id: ObjectId(...), regexMatch: /ticketwor/gi, ratePoint:2]<br/>
Я пытался с помощью следующего кода. Но не смог выполнить поиск по регулярному выражению и, следовательно, не смог объединить объекты.
<code>
db.messages.aggregate([ <br/>
{ <br/>
$lookup: { <br/>
from: "regexes", <br/>
localField: "message", <br/>
foreignField: "regexMatch", <br/>
as: "fromItems"<br/>
}<br/>
},<br/>
{<br/>
$replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ "$fromItems", 0 ] }, "$$ROOT" ] } }<br/>
}, <br/>
{ $project: { fromItems: 0 } } <br/>
])</p>
<p>
Ожидаемый результат следующий:
<code>
[{_id: ObjectId(...), message: I had a dinner at McDonald, ratePoint: 3}, <br/>
{_id: ObjectId(...), message: I booked my ticket from TicketWorld ,ratePoint: 2}, <br/>
{_id: ObjectId(...), message: I spent my weekend at Paris, ratePoint: 4},<br/>
{_id: ObjectId(...), message: I went to Paris, ratePoint: 4},<br/>
{_id: ObjectId(...), message: I like McDonald, ratePoint: 3}]</p>
<p>