Node.js Mongodb聚合在两个集合之间使用group by进行区分、平均和求和
我有用户收集的数据如下Node.js Mongodb聚合在两个集合之间使用group by进行区分、平均和求和,node.js,mongodb,nosql,aggregation-framework,Node.js,Mongodb,Nosql,Aggregation Framework,我有用户收集的数据如下 { "_id" : ObjectId("5da594c15324fec81d000027"), "password" : "******", "activation" : "Active", "userType" : "Author", "email" :
{
"_id" : ObjectId("5da594c15324fec81d000027"),
"password" : "******",
"activation" : "Active",
"userType" : "Author",
"email" : "something@gmail.com",
"name" : "Something",
"profilePicture" : "profile_pictures/5da594c15324fec81d0000271607094354423image.png",
"__v" : 0
}
{
"_id" : ObjectId("5fcb7bb4485c34a41900002b"),
"duration" : 2.54,
"page" : 1,
"activityDetails" : "Viewed Page for seconds",
"contentType" : "article",
"activityType" : "articlePageStayTime",
"label" : 3,
"bookId" : ObjectId("5f93e2cc74153f8c1800003f"),
"ipAddress" : "::1",
"creator" : ObjectId("5da594c15324fec81d000027"),
"created" : ISODate("2020-12-05T12:23:16.867Z"),
"__v" : 0
}
另一方面,用户日志有这样的数据
{
"_id" : ObjectId("5da594c15324fec81d000027"),
"password" : "******",
"activation" : "Active",
"userType" : "Author",
"email" : "something@gmail.com",
"name" : "Something",
"profilePicture" : "profile_pictures/5da594c15324fec81d0000271607094354423image.png",
"__v" : 0
}
{
"_id" : ObjectId("5fcb7bb4485c34a41900002b"),
"duration" : 2.54,
"page" : 1,
"activityDetails" : "Viewed Page for seconds",
"contentType" : "article",
"activityType" : "articlePageStayTime",
"label" : 3,
"bookId" : ObjectId("5f93e2cc74153f8c1800003f"),
"ipAddress" : "::1",
"creator" : ObjectId("5da594c15324fec81d000027"),
"created" : ISODate("2020-12-05T12:23:16.867Z"),
"__v" : 0
}
我尝试做的与此sql查询等效
SELECT name,count(page),sum(duration),avg(DISTINCT(label)),COUNT(DISTINCT(bookId)) FROM users JOIN userlogs ON users._id=userlogs.creator where userlogs.activityType<>"articleListeningTime" group by users._id.
从用户中选择名称、计数(页面)、总和(持续时间)、平均值(不同的(标签))、计数(不同的(bookId)),并在用户上加入userlogs。\u id=userlogs.creator where userlogs.activityType“ArticleListingTime”用户分组。\u id。
我可以按和求和一起进行正常的
分组。但是如何用这个来做avg distinct
和count distinct
?我使用的是mongodb 3.2版我认为这不需要$group
阶段,您可以使用$setUnion
和$size
,$avg
操作符
$lookup
与用户日志
集合
$project
显示必填字段,并根据您的条件筛选用户日志
$project
从用户日志获取统计信息
- 使用
$size
- 使用
$sum
- 使用
$setUnion
和$avg
- 使用
$serUnion
和$size
我认为这不需要$group
阶段,您可以使用$setUnion
和$size
,$avg
操作符
$lookup
与用户日志
集合
$project
显示必填字段,并根据您的条件筛选用户日志
$project
从用户日志获取统计信息
- 使用
$size
- 使用
$sum
- 使用
$setUnion
和$avg
- 使用
$serUnion
和$size
您是否将密码存储为明文?你不应该这样做,而是存储一个散列值。谢谢你的提问!我将它存储为散列值。粘贴到此处后,刚替换为星号。是否将密码存储为明文?你不应该这样做,而是存储一个散列值。谢谢你的提问!我将它存储为散列值。粘贴到这里后,刚刚替换为星号。谢谢!它只有在过滤器中添加“as”后才起作用。顺便说一句,你的意思是在最后一点中“使用$setUnion和$size获取唯一bookId的计数”吗?好的,在$filter的最新版本中,“as”是可选的,在最后一点中是的,我已经更正了这两个错误。谢谢!没想到没有分组就不可能了!谢谢它只有在过滤器中添加“as”后才起作用。顺便说一句,你的意思是在最后一点中“使用$setUnion和$size获取唯一bookId的计数”吗?好的,在$filter的最新版本中,“as”是可选的,在最后一点中是的,我已经更正了这两个错误。谢谢!没想到没有分组就不可能了!