Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js mongodb获得用户最喜欢的帖子_Node.js_Mongodb_Express - Fatal编程技术网

Node.js mongodb获得用户最喜欢的帖子

Node.js mongodb获得用户最喜欢的帖子,node.js,mongodb,express,Node.js,Mongodb,Express,如果我有一个文档集,看起来或多或少像这样: { "_id": "52c06c86b78a091f26000001", "desc": "Something somethingson", "likes": [ { "user_id": "52add4f4344e8ca867000001", "username": "asd", "created": 1390652212592 }, { "user_id": "

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

{
"_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个“用户id”

我猜这是可能的。唯一的问题是我没有从mongo网站上得到足够的例子来整理我自己的东西

谁能给我举个这样做的例子,或者至少告诉我,如果是的话,这是不可能的

试试看

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

试试看

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

见此。

,有可能:

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

,有可能:

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

如果需要计算每个父用户的likes元素数,可以执行以下操作:

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


如果需要计算每个父用户的likes元素数,可以执行以下操作:

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


您需要查看聚合框架。他们有一个非常直接的例子适用于您的用例。您需要查看聚合框架。他们有一个非常直接的例子适用于您的用例。谢谢你的贡献。然而,这个网站是为了帮助人们学习,而不是为他们工作。OP可以在不了解发生了什么的情况下复制粘贴此内容,但没有获得任何有价值的东西。此网站帮助人们找到解决方案。如果提问者确实复制粘贴或分析了示例,则他/她的决定是逐步复制粘贴或分析示例。这个答案绝对是个好答案。我在这里不做任何人的工作。。。这充其量只是一个例子。OP不会从这个简单的查询中创建帝国。此查询不是专有的,不属于我,也不属于您或OP。MongoDB创建了供所有人使用的查询引擎。致以最良好的祝愿,感谢您的贡献。然而,这个网站是为了帮助人们学习,而不是为他们工作。OP可以在不了解发生了什么的情况下复制粘贴此内容,但没有获得任何有价值的东西。此网站帮助人们找到解决方案。如果提问者确实复制粘贴或分析了示例,则他/她的决定是逐步复制粘贴或分析示例。这个答案绝对是个好答案。我在这里不做任何人的工作。。。这充其量只是一个例子。OP不会从这个简单的查询中创建帝国。此查询不是专有的,不属于我,也不属于您或OP。MongoDB创建了供所有人使用的查询引擎。在$group子句中,user_id:$user_id”应替换为“$user_id”。在$group子句中,user_id:$user_id”应替换为“$user_id”