如何在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聚合进行分页?

如何通过聚合连接mongoDB中的两个表并需要根据匹配获取结果[重复]

如何通过 $project 中提供的 _id 与 mongodb 聚合进行 $match?

如何在 Spring Boot 中使用特定日期范围和聚合从 MongoDB 数据库中检索数据?

如何在数组的 mongodb 的子字段中进行聚合和分组?

为啥在与数组中的字段匹配时,mongoDB聚合中的查找中的管道不起作用?