Mongodb $ match с использованием индекса для объединенных ($ lookup) документов - PullRequest
0 голосов
/ 03 июля 2018

Общий выпуск

Допустим, у нас есть пользователи в нашей системе, и у каждого пользователя есть ТОЧНО одна команда. Теперь в системе есть возможность поиска команд по имени пользователя, фамилии и имени команды. Такой поиск должен быть хорошо проиндексирован, потому что он не должен использовать каждый баран на сервере.

Визуальные объекты

class User
{
    public ObjectId Id;
    public string FirstName;
    public string LastName;
}

class Team
{
    public ObjectId Id;
    public ObjectId UserId;
    public string Name;
}

Эквивалент SQL

SELECT
  Id,
  UserId
FROM
  Teams
  LEFT OUTER JOIN Users ON Users.Id = Teams.UserId
WHERE
  Users.FirstName LIKE "%someting%"
  OR Users.LastName LIKE "%someting%"
  OR Teams.Name LIKE "%someting%"

Что у меня сейчас

db.getCollection('Teams').aggregate([
{$lookup:
     {
       from: "Users",
       localField: "UserId",
       foreignField: "Id",
       as: "user"
     }},
{$match : {$or : [{Name : /somename/}, {"user.0.FirstName": /somename/}, {"user.0.LastName" : /somename/}]}}

Задача

Работает, но ... Я не могу понять, как мне нужно индексировать вещи или что-то менять, чтобы запрос использовал индексы.

Не похоже, что индексация соответствующих полей Команды или Пользователя помогает.

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