我需要做一个自定义的查找,让我只能得到一个项目,每个值。
示例:
源记录:
{
...
"names": [ "name 1", "name 2", "name 3" ],
...
}
要填充的记录:
{ "name": "name 1", "id": 1 }, // populate
{ "name": "name 1", "id": 2 }, // ignore
{ "name": "name 2", "id": 3 }, // populate
{ "name": "name 2", "id": 4 }, // ignore
{ "name": "name 3", "id": 5 }, // populate
因此,这里只需要填充id 1, and id 3 and id 5
,这意味着每个名称只有一条记录。
我使用了$group
,它工作正常,但对于5亿条记录的数据库来说非常慢。
因此在查找流水线中是否存在一种方法来针对每个值仅获取一个记录。
1条答案
按热度按时间7lrncoxx1#
在
$lookup
子管道中,使用$group
只获取每个组的$first
记录。$replaceRoot
可将记录转换为所需的形式。Mongo Playground