如何限制从 $lookup 操作返回的字段被添加到 Mongo 视图

How to Limit Fields Returned from $lookup Operation Being Added to a Mongo View

在我的 MongoDB/Node 后端设置中,我通过 Studio 3T 使用管道运算符的组合来创建特定视图。该管道中的一个步骤涉及使用 $lookup 运算符从第二个集合中提取相关数据。此代码如下所示:

// Stage 3
{
  $lookup: {
    "from": "clients",
    "localField": "client.id",
    "foreignField": "_id",
    "as": "client"
  }
}

为了将其作为对象而不是数组放入视图中,我使用 $unwind 运算符,如下所示:

// Stage 4
{
    $unwind: {
       path : "$client"
    }
}

现在这行得通了,因为来自另一个集合的相应记录的信息会准确地放入视图中我想要的位置。但是,问题是,这会从相应记录中提取所有字段,而我真正需要的只是该对象中的三个项目;即 _idname.firstname.last

现在我得到这样的东西:

client: {
    _id: someId,
    prop1: value,
    prop2: value,
    prop3: value,
    name: {
      first: value,
      last: value
    }
    prop4: value
}

当我只需要这个:

client: {
    _id: someId,
    name: {
      first: value,
      last: value
    }
}

我查看了 mongo 文档,但我不清楚如何限制从 $lookup 操作打印到视图的数据量。我是否需要向 $lookup 操作添加一些条件逻辑?或者是否有其他操作员我应该加入管道来处理这个问题?

"Reshaping" 输出文档听起来很像如何使用 $project 管道阶段。

在这种情况下,只需在 $lookup 阶段后添加一个 $project,它应该符合目的。这是一个显而易见的方法。 像这样:

var pipeline = [
    /* ... */
    {
        $lookup: {
            "from": "clients",
            "localField": "client.id",
            "foreignField": "_id",
            "as": "client"
        }
    },
    /* ... */
    {
        $project: {
            client: {
                _id: 1,
                name: 1
            }
        }
    }
];