【问题标题】:Populating a field by aggregating other collections通过聚合其他集合来填充字段
【发布时间】:2021-04-01 11:32:11
【问题描述】:

我有一个用户和一个评级集合。评分集合有ratedByratedTo 和分数。 现在我想根据某些标准找到所有用户,并获得他们的ratingAvg。所以结果看起来像下面这样:

[
{_id: 44s5dsdde4e4e55e,name:"bob", email: "bob@gmail.com", ratingAvg: 3, ...},
{_id: 3as5dsdde4e4e55e,name:"alice", email: "alice@gmail.com", ratingAvg: 4, ...}
]

我对数据库非常陌生,尤其是 MongoDB。我可以通过这样做找到特定用户的ratingAvg

Ratings.aggregate([
            {
                $match: {ratedTo: Mongoose.Types.ObjectId(userId)}
            }, 
            {
                $group: {
                    _id: "$ratedTo",
                    avgRating: { $avg : "$score" }
                }
            }
        ]);

但我需要做的是让用户使用他们的字段和ratingAvg 计算如上。我能想到的是通过Users.find({field: criteria})分别找到用户并循环访问他们并使用上面的代码来查找他们的评分。或者解决方案是进行查找并加入用户和评分,然后聚合它们。

【问题讨论】:

    标签: mongodb mongoose aggregation mongoose-populate


    【解决方案1】:

    一种可能的方法是使用聚合:

    Playground

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2023-03-26
      • 1970-01-01
      • 2015-10-13
      • 2018-06-30
      相关资源
      最近更新 更多