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”