MongoDB中的联合和查找

时间:2018-08-28 13:29:15

标签: mongodb aggregation-framework lookup

我的目标是根据该集合中某个字段的搜索文本以及另一个集合中的另一个字段,从一个集合中检索一些文档。

让我们以这些文档为例(搜索必须在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字段中的搜索结果结合起来的方法

0 个答案:

没有答案