一般问题
可以说我们的系统中有用户,每个用户都有完全个团队。 现在,系统中有了一项功能,可以按用户的名字,姓氏和团队名称搜索团队。 这样的搜索应该有很好的索引,因为它不能消耗服务器拥有的每一个内存。
视觉对象
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/}]}}
问题
它有效,但是... 我无法弄清楚我需要如何索引内容或更改内容以使查询使用索引。
索引团队或用户的相关字段似乎没有帮助。