Союз и поиск в MongoDB - PullRequest
       7

Союз и поиск в MongoDB

0 голосов
/ 28 августа 2018

Моя цель - извлечь некоторые документы из коллекции на основе текста поиска из поля в этой коллекции и другого поля из другой коллекции.

Давайте возьмем эти документы в качестве примера (поиск должен быть выполнен в поле 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, я должен получить задачу с идентификатором 1 (поскольку ее заголовок содержит XX), а задачу с идентификатором 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...