使用聚合从 mongodb 中填充,从对象中排除某些属性

Exclude certain attributes from object using the populate from mongodb using aggregate

我想使用 mongodb 中的 populate() 函数排除例如电子邮件和地址,只需从中获取名称:

示例:

const results = await Seller.aggregate(aggregatePipeline).exec();
const sellers = await Seller.populate(results, { path: "user" });

填充用户而不是:

...
user: {
    email: "hgjh@gmail.com",
    address:{},
    name: "name"
}

我只想拥有(从路径中排除某些数据):

...
user: {
   name: "name"
}

你可以做任何一个,

const sellers = await Seller.populate(results, { path: "user", select: '- 
email -address'  });

const sellers = await Seller.populate(results, { path: "user", select: 
'name'  });

据我了解 mongoose 文档 https://mongoosejs.com/docs/populate.html,填充为 $lookup 用于解析与其他集合的关系。

MongoDB has the join-like $lookup aggregation operator in versions >= 3.2. Mongoose has a more powerful alternative called populate(), which lets you reference documents in other collections.

在您的情况下,您不需要使用其他集合解析字段。您已经有了目标的最终数据。您可以在管道聚合的末尾使用 $project 来仅保留名称字段,例如:

{ $project: { name:1 } }

如果我帮到了你,请告诉我。

编辑:

我读得太快了,如果你在填充之后而不是在聚合之后有这个数据资源,你可能 select 你的最终字段,就像说的那样 这里

user: {
    email: "hgjh@gmail.com",
    address:{},
    name: "name"
}