基于正则表达式搜索的查找和合并对象在两个集合之间进行匹配

时间:2019-06-09 09:23:56

标签: mongodb aggregate lookup

我需要执行$ lookup聚合并根据正则表达式匹配合并对象。一个集合具有正则表达式匹配模式。因此,基于这些模式,需要在另一个集合上执行搜索。

我有两个收藏。 (1)消息和(2)正则表达式。 这是消息收集的输出。


[{_id: ObjectId(...), message: I had a dinner at McDonald}, 
{_id: ObjectId(...), message: I booked my ticket from TicketWorld},
{_id: ObjectId(...), message: I spent my weekend at Paris},
{_id: ObjectId(...), message: I went to Paris},
{_id: ObjectId(...), message: I like McDonald}]
这是正则表达式集合的输出。

[{_id: ObjectId(...), regexMatch: /mcdonald/gi, ratePoint:3}, 
{_id: ObjectId(...), regexMatch: /paris/gi, ratePoint:4},
{_id: ObjectId(...), regexMatch: /ticketwor/gi, ratePoint:2]

我尝试使用以下代码。但是无法执行正则表达式搜索,因此无法合并对象。


db.messages.aggregate([ 
{
$lookup: {
from: "regexes",
localField: "message",
foreignField: "regexMatch",
as: "fromItems"
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ "$fromItems", 0 ] }, "$$ROOT" ] } }
},
{ $project: { fromItems: 0 } }
])

预期输出如下:


[{_id: ObjectId(...), message: I had a dinner at McDonald, ratePoint: 3}, 
{_id: ObjectId(...), message: I booked my ticket from TicketWorld ,ratePoint: 2},
{_id: ObjectId(...), message: I spent my weekend at Paris, ratePoint: 4},
{_id: ObjectId(...), message: I went to Paris, ratePoint: 4},
{_id: ObjectId(...), message: I like McDonald, ratePoint: 3}]

0 个答案:

没有答案