【问题标题】:mongodb 2 level aggregation [duplicate]mongodb 2级聚合[重复]
【发布时间】:2021-03-31 03:41:08
【问题描述】:

我有 3 个相互引用的集合

A -> B -> C

我想在与 B 匹配并从 B 到 C 后过滤数据

集合 1

Products: [{
_id:ObjectId(),
name:"product1",
productCatalogue:[reference to productCatalogue collection]
},....]

系列 2

productCatalogue: [{
_id:ObjectId(),
name:"catelgoue1",
category:{
  cat:[reference to category table],
  sub1:[reference to category table],
  sub2:[reference to category table]
}
},...]

系列 3

category: [{
  _id:ObjectId(),
  name:"cat1",
  type:"parent"
},....]

我想过滤数据,以便使用聚合过滤具有 catalog:catelgoue1 和 category: cat1 的 products

【问题讨论】:

  • @turivishal 确实如此,但你能解释一下name: { $first: "$name" }, address: { $push: "$address" } $first 在这里的作用是什么,$name 代表什么是批准的答案
  • 引用$group 阶段和$first 运算符和$push 运算符。

标签: mongodb mongoose aggregation


【解决方案1】:

您可以在每次查找 $match 之前使用 示例代码:

const orderProcess = await Order.aggregate([
{
    $match: {
        userId: userId
    }
},
{
    $lookup: {
        from: "products",
        localField: "product_id",
        foreignField: "_id",
        as: "product",                 
    }
},
{
    $unwind: "$product"
},
{
    $lookup: {
        from: "prices",
        localField: "product_id", // $product._id => like top lookup data
        foreignField: "productId", // $product._id => like top lookup data
        as: "price"
    },
},
{
    $unwind: "$price"
},
{
    $project:{
        // response all item
    }
}])

【讨论】:

  • 我必须将聚合查询放在产品架构上。我将取消引用目录,然后从目录架构中取消引用类别以找到我的答案。您的回复没有给出预期的结果。谢谢!
猜你喜欢
  • 2016-04-13
  • 2018-11-17
  • 2019-10-14
  • 2019-11-04
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 2021-12-15
相关资源
最近更新 更多