Поиск и объединение объектов на основе поиска Regex между двумя коллекциями - PullRequest
0 голосов
/ 09 июня 2019

Мне нужно выполнить агрегат $ 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>
...