需要帮助聚合猫鼬数据

问题描述

我有一个 MERN 堆栈应用程序,当我进行 GET 调用时,我想返回我所有 MongoDB 对象的投票。

这就是我的对象的样子:

{_id: ObjectId("6092d48d96984d233cf77152")
user: "John Doe"
movies: [
     0:
          _id: ObjectId("6092b19345f48a33447468a7"),title: "Alpha",ranking: 3
     1:
          _id: ObjectId("6092b19345f48a33447468a7"),title: "Bravo",ranking: 2
     2:
          _id: ObjectId("6092b19345f48a33447468a7"),title: "Charlie",ranking: 1
]}

{_id: ObjectId("6092d48d96984d233cf77152")
user: "John Doe"
movies: [
     0:
          _id: ObjectId("6092b19345f48a33447468a7"),ranking: 1
]}

显然会有更多数据,但基本上我希望它返回:

[{title: "Alpha",ranking: 6},{title: "Bravo",ranking: 4},{title: "Charlie",ranking: 2}]

我假设我必须使用 $match 函数,但这是我第一次像这样使用 Mongoose/MongoDB。提前致谢!

解决方法

  • $unwind 解构 movies 数组
  • $group by movies.title 和 sum ranking
let result = await YourModelName.aggregate([ // replace your model name
  { $unwind: "$movies" },{
    $group: {
      _id: "$movies.title",ranking: { $sum: "$movies.ranking" }
    }
  }
])

Playground