我的目标是根据该集合中某个字段的搜索文本以及另一个集合中的另一个字段,从一个集合中检索一些文档。
让我们以这些文档为例(搜索必须在title
集合的tasks
字段和content
集合的logs
字段中进行) :
{
task: {
_id: '1',
title: 'XXX'
},
task: {
_id: '2',
title: 'YYY'
},
task: {
_id: '3',
title: 'ZZZ'
}
}
{
log: {
_id: '1',
task: '1',
content: 'logAA'
},
log: {
_id: '2',
task: '2',
content: 'logXX'
},
log: {
_id: '3',
task: '2',
content: 'logCC'
}
}
例如,如果我搜索文本XX
,则必须检索ID为1
的任务(因为其标题包含XX),而ID为2
的任务(因为其任务日志中包含内容为XX的内容)
我的第一个尝试是使用搜索到的文本检索logs
集合中的文档,但是我仍然不知道如何将结果与来自title
字段中的搜索结合起来tasks
集合:
const tasks = await TaskModel.aggregate([
{
// This is a first criteria that must be checked before the search
$match: {certainField: certainValue}
},
{
$lookup: {
from: "logs",
let: {
taskId: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: [ "$$taskId", "$task"] },
{ $text: { $search: searchText} } //The content field in indexed as a text
]
}
}
}
],
as: "tasks"
}
}
]);
从那里,我找不到如何将该结果与title
字段中的搜索结果结合起来的方法