如何在MongoDB聚合中将与数组相同的字段和项目分组

土豆

Mongodb游乐场

我加入了其他两个收藏,并希望按类别对其进行分组

我想要这样的项目:

[
  {
    "_id": "101",
    "cars": [
      {
        "carName": "CyberTruck",
        "driverName": "Tom",
        "views": 50
      },
      {
        "carName": "Model 3",
        "driverName": "Tom",
        "views": 40
      },
      {
        "carName": "Model X",
        "driverName": "Tom",
        "views": 30
      }
    ],
    "categoryName": "Tesla"
  },
  {
    "_id": "102",
    "cars": [
      {
        "carName": "X1",
        "driverName": "Mary",
        "views": 20
      }
    ],
    "categoryName": "BMW"
  }
]

另外,我想按视图从最大到最小的顺序进行排序,并为每个类别投影仅前三个元素。

这是我之前尝试过的:https : //mongoplayground.net/p/FPCU4aV9a9X

但是,我不知道如何与驱动程序集合一起将驱动程序名称与其中的driverId匹配

当然

使用您的脚本,我们可以像下面这样进行另一次查找。

{
    "$unwind": "$cars"
  },
  {
    $lookup: {
      from: "driver",
      localField: "cars.driverId",
      foreignField: "_id",
      as: "drivers"
    }
  },
  {
    $addFields: {
      drivers: "$$REMOVE",
      "cars.drivers": "$drivers"
    }
  },
  {
    "$group": {
      _id: "$_id",
      categoryName: {
        $first: "$categoryName"
      },
      cars: {
        $push: "$cars"
      }
    }
  }

工作蒙戈游乐场

但这可能是我最简单的方法。由于您了解标准查找,因此还有另一种类型:联接条件和不相关子查询在这里,您可以并行使用联接集合中的阶段。

该脚本是

db.category.aggregate([
  {
    $lookup: {
      from: "car",
      let: {
        carId: "$_id"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$$carId",
                "$categoryId"
              ]
            }
          }
        },
        {
          $sort: {
            "views": -1
          }
        },
        {
          $limit: 3
        },
        {
          "$lookup": {
            "from": "driver",
            "localField": "driverId",
            "foreignField": "_id",
            "as": "drivers"
          }
        }
      ],
      as: "join"
    }
  }
])

工作蒙戈游乐场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在mongodb的聚合中将文档与特定字段分组

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

如何在mongodb聚合中对嵌套字段进行分组

如何在Mongodb中聚合不同的数组字段

如何在mongodb中将非数组字段与数组进行比较?

如何在mongodb中查找和项目聚合后排序?

如何在更新时间MongoDb中将字段的总值添加为预聚合的字段?

MongoDB:聚合和展平数组字段

MongoDB聚合:在两个数组的公共字段上分组

如何在单独的numpy数组中将具有相同值的numpy数组的元素分组

如何在信号图中将与同一山峰相对应的峰点分组

如何在div中将具有相同日期的项目分组时按日期显示列表

如何在C#中的MongoDB查询中将“聚合”与“项目”一起使用?

如何在$ addFields阶段(聚合)中将字段的值用作数组索引

MongoDB-具有聚合的项目数组子字段

如何在单个mongodb查询中使用求和,乘法,除法和分组聚合

如何在 mongodb 聚合中同时计算文档总数和分组计数?

如何在Fabric.js中将与另一个对象相同的位置和比例应用于一个对象?

如何在MongoDB聚合框架中将字符串拆分为字母数组?

如何在MongoDB中将数组位置$与聚合投影一起使用

如何在mongodb聚合中将对象数组转换为对象

如何在MongoDB中聚合文档数组

如何使用聚合和分组两个字段

Mongodb聚合和嵌套分组

如何在mongodb中将文档分组为其他模型的数组

如何在$ filter mongodb中将数组字段与数组输入值进行比较

如何在 MongoDB 中對字段進行分組、區分和聚合

聚合和展平MongoDB中的数组字段

mongodb:匹配,按多个字段分组,项目和计数