MongoDB为数组中的每个值查找一条记录

svdrlsy4  于 2023-02-21  发布在  Go
关注(0)|答案(1)|浏览(159)

我需要做一个自定义的查找,让我只能得到一个项目,每个值。
示例:
源记录:

{
  ...
  "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亿条记录的数据库来说非常慢。
因此在查找流水线中是否存在一种方法来针对每个值仅获取一个记录。

7lrncoxx

7lrncoxx1#

$lookup子管道中,使用$group只获取每个组的$first记录。$replaceRoot可将记录转换为所需的形式。

db.source.aggregate([
  {
    "$lookup": {
      "from": "names",
      "localField": "names",
      "foreignField": "name",
      "pipeline": [
        {
          $group: {
            _id: "$name",
            record: {
              "$first": "$$ROOT"
            }
          }
        },
        {
          "$replaceRoot": {
            "newRoot": "$record"
          }
        }
      ],
      "as": "names"
    }
  }
])

Mongo Playground

相关问题