【问题标题】:mongodb get users with most liked postsmongodb 获取帖子最多的用户
【发布时间】:2014-02-11 18:28:17
【问题描述】:

如果我有一个文档或多或少看起来像这样的集合:

{
"_id": "52c06c86b78a091f26000001",
"desc": "Something somethingson",
"likes": [
    {
        "user_id": "52add4f4344e8ca867000001",
        "username": "asd",
        "created": 1390652212592
    },
    {
        "user_id": "52add4f4344e8ca867000001",
        "username": "asd",
        "created": 1390652212592
    }
],
"user_id": "52add4f4344e8ca867000001",
"username":"username"
}

我可以使用 mongodb(使用 nodejs 和 express)获取 10 个用户最喜欢帖子的列表吗?

我认为应该可以通过按“user_id”对所有帖子进行分组,然后计算“likes”数组中的项目总数来执行此 Map-Reduce 或使用 Aggregate。然后从中获取前 10 个“user_id”。

我猜这是可能的。唯一的问题是我从 mongo 网站上获得的示例不足以组合我自己的东西。

谁能给我一个这样做的例子,或者至少告诉我这是不可能的。 =)

【问题讨论】:

标签: node.js mongodb express


【解决方案1】:

试试看……

db.collection.aggregate([
  {$unwind: "$likes"},
  {$group: {_id: "$user_id", likesCount: {$sum: 1}}},
  {$sort: {likesCount: -1}},
  {$limit: 10},
  {$project: {_id: 1}}
])

看到这个tutorial

【讨论】:

  • 感谢您的贡献。然而,这个网站是为了帮助人们学习,而不是为他们工作。 OP 可以在不了解发生了什么的情况下直接复制粘贴,并且没有获得任何有价值的东西。
  • 这个网站帮助人们找到解决方案。如果提问者确实复制粘贴或逐步分析示例是他/她的决定。这个答案绝对是个好答案。
  • 我在这里没有做任何人的工作......这充其量只是一个例子。 OP 不会从这个简单的查询中创建一个帝国。此查询不是专有的,不属于我,也不属于您或 OP。 MongoDB 创建了供所有人使用的查询引擎。最好的问候,
【解决方案2】:

是的,有可能:

db.coll.aggregate([
    {
        $unwind: "$likes"
    },
    {
        $group: {
            _id: "$user_id", 
            likesPerUser: {
                $sum:1
            }
        }
    }
    {
        $sort: {
            likesPerUser: -1
        };
    }
    {
        $limit: 10
    }
])

【讨论】:

  • $group 子句中,user_id: "$user_id" 应替换为 _id: "$user_id"
【解决方案3】:

如果您需要统计每个父用户的点赞数,您可以执行以下操作:

http://mongotry.herokuapp.com/#?bookmarkId=52fb8c604e86f9020071ed71

[
{
    "$unwind": "$likes"
},
{
    "$group": {
        "_id": "$user_id",
        "likesPerUser": {
            "$sum": 1
        }
    }
},
{
    "$sort": {
        "likesPerUser": -1
    }
},
{
    "$limit": 10
}
]

否则,如果您需要喜欢的用户 ID 的数量,每个子文档跨所有父母计算 1 个,您可以执行以下操作:

http://mongotry.herokuapp.com/#?bookmarkId=52fb8cf74e86f9020071ed72

[
{
    "$unwind": "$likes"
},
{
    "$group": {
        "_id": "$likes.user_id",
        "likesPerUser": {
            "$sum": 1
        }
    }
},
{
    "$sort": {
        "likesPerUser": -1
    }
},
{
    "$limit": 1
}
]

【讨论】:

    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 2023-03-25
    • 2020-12-07
    • 2011-08-06
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多