Mongodb $ match在联接的($ lookup)文档上使用索引

时间:2018-07-03 12:41:47

标签: mongodb mongodb-query lookup

一般问题

可以说我们的系统中有用户,每个用户都有完全个团队。 现在,系统中有了一项功能,可以按用户的名字,姓氏和团队名称搜索团队。 这样的搜索应该有很好的索引,因为它不能消耗服务器拥有的每一个内存。

视觉对象

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/}]}}

问题

它有效,但是... 我无法弄清楚我需要如何索引内容或更改内容以使查询使用索引。

索引团队或用户的相关字段似乎没有帮助。

0 个答案:

没有答案