如何在mongodb中使用聚合和匹配?
Posted
技术标签:
【中文标题】如何在mongodb中使用聚合和匹配?【英文标题】:How use aggregate and match in mongodb? 【发布时间】:2021-08-12 17:17:04 【问题描述】:我有两个集合 ProductInventories 和 ProductDetails。 ProductInventories 有一个 prodId,它连接到 ProductDetails 的 id。我想获得所有仅处于活动状态的产品。
const products = await ProductInventory.find().populate(
path: 'prodId',
model: ProductDetails,
populate: path: 'category', select: 'category_name', model: Category ,
);
我正在使用此代码获取所有数据,但我希望有一个条件,即它将返回 isActicve = True 的项目。我只是使用过滤器功能来过滤所有活动数据。我想学习如何使用聚合和匹配。
【问题讨论】:
【参考方案1】:您可以先根据 prodId 字段使用从 ProductInventories 到 ProductDetails 的查找聚合,然后使用字段 isActive = true 进行匹配聚合
db.ProductInventories.aggregate([
$lookup:
from: "ProductDetails",
localField: "prodId",
foreignField: "id",
as: "product_details"
,
$match:
isActive: true
])
参考https://docs.mongodb.com/manual/reference/operator/aggregation/match/ https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
【讨论】:
【参考方案2】:这是我更新的代码,它现在可以工作了。也感谢您帮助@smitha t m。
const products = await ProductInventory.aggregate([
$lookup:
from: 'productdetails',
localField: 'prodId',
foreignField: '_id',
as: 'product',
,
,
$unwind: '$product',
,
$match: 'product.isActive': true ,
,
]);
【讨论】:
以上是关于如何在mongodb中使用聚合和匹配?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过聚合连接mongoDB中的两个表并需要根据匹配获取结果[重复]
如何通过 $project 中提供的 _id 与 mongodb 聚合进行 $match?